ヘッドアップ:Unityで作業している間にこの問題が発生したにもかかわらず、Unityに特有のことは何もなく、プログラミングロジックに関することですので、恥ずかしがり屋ではありません。アングルの境界での問題
私はUnityを使用していて、スクリプトでオブジェクトを回転しています。つまり、180度に回転させると、オブジェクトはそれほど回転しなくなり、179度から181度の間で停止する傾向があります。したがって、回転が完了したかどうかを確認するには、回転角度がtargetAngle +/- 1であることを確認します。回転角が-1と1の間にある場合
Iは、targetAngle、この場合に0である場合
lowerLimit = targetAngle-1;
upperLimit = targetAngle + 1;
今、問題が発生
if (transform.eulerAngles.z > lowerLimit && transform.eulerAngles.z < upperLimit)
を使用して私のスクリプトチェックをチェック。しかし、-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;
}
}
ああ、非常にいいです。この具体的なケースでは、私は180度以上回転する必要はないので、これを採用すると思います。ありがとう! – xbonez
私はまだこの問題に遭遇しています。 targetAngleが0の場合、lowerLimitは359、upperLimitは361です。しかし、180から0に360度回転した場合、回転は約359で停止します。この場合、 ((359 + 360) > 359 &&(359 + 360)<361) – xbonez
最後の編集をお試しください。私はモジュラスを巧みに使い、必要に応じて360を追加することでこれを修正できることを100%確信しています。これがまだそれでない場合は、私はおそらく完全にそれを爪にデバッグ環境内でこれを確認する必要があります恐れている。私が今に行かなくてはならないので、あなたがあなたの進歩を投稿するならば(今までにあなたか他の誰かがそれを修正しない限り)、今夜か明日のどちらかにもう一度これを見るでしょう。 – takrl