注意:この問題はUnityでの作業中に発生しましたが、Unityに固有のものはなく、プログラミングロジックに関するものなので、恥ずかしがらないでください。
Unityを使用していて、スクリプトでオブジェクトを回転しています。たとえば、180度まで回転させると、オブジェクトはそれほど正確には回転せず、179度から181度の間で停止する傾向があります。したがって、回転が完了したかどうかを確認するには、回転角がtargetAngle+/-1であるかどうかを確認します。これは機能します。
使ってチェックします
if (transform.eulerAngles.z > lowerLimit && transform.eulerAngles.z < upperLimit)
どこ
lowerLimit = targetAngle-1;
upperLimit = targetAngle + 1;
ここで、targetAngleが0のときに問題が発生します。この場合、スクリプトは回転角が-1から1の間にあるかどうかをチェックします。ただし、-1は実際には359である必要があるため、角度が359から1の間にあるかどうかをチェックする必要があります。 。
どうすればこれを実装できますか?言い換えれば、私はラップアラウンド記数法を実装する方法を尋ねていると思います。
編集
1つの回避策が見つかりました。targetAngleが0の場合、私は特別に扱います。それは機能しますが、最もエレガントではありません。
if (targetAngle == 0.0)
{
if ((transform.eulerAngles.z > 359.0 && transform.eulerAngles.z <= 360.0) || (transform.eulerAngles.z >= 0.0 && transform.eulerAngles.z <= 1))
{
rotate = false;
}
}
else
{
if (transform.eulerAngles.z > targetAngle - 1 && transform.eulerAngles.z < targetAngle + 1)
{
rotate = false;
}
}