前提・実現したいこと
MLAgentsで学習させているAgentのオブジェクトの回転可能角を制限したいです。
発生している問題・エラーメッセージ
C#
1nowAngles.x = System.Math.Min (nowAngles.x, 90.0f); 2nowAngles.x = System.Math.Max (nowAngles.x, -90.0f); 3nowAngles.y = System.Math.Min (nowAngles.y, 90.0f); 4nowAngles.y = System.Math.Max (nowAngles.y, -90.0f);
※nowAngles現在の角度
このように実装してみたのですが、x軸回転角が0度を通るたびに、x軸回転角が90度にされてしまいます。この現象が発生するとき、稀にz軸回転角もランダムな値に変更されてしまいます。z軸を操作するプログラムは一切書いていません。
さらに意図していた、回転が-90~90度になるといった挙動はせず、普通にx,y軸ともに±90度以降も行けてしまいます。
補足情報(FW/ツールのバージョンなど)
Unity-2020.2.2f1
おそらくクォータニオンによる姿勢表現とオイラー角による姿勢表現の変換に関わる問題かと思います。以前別の方の https://teratail.com/questions/200674 のご質問に回答を投稿しましたが、あれに似た挙動でしょうか?
あのような問題を回避するにはオイラー角を別途フィールドに保持するよう書き換えるか、それが無理なら何とか別の手で意図通りのオイラー角に矯正することになるんじゃないかと思います。
角度制限部分だけでなくエージェントのスクリプト全体もご提示いただいた方が回答がつきやすいかもしれません。
あなたの回答
tips
プレビュー