次のコードを使用して、ターゲットを監視するためにゲームキャラクターを回転させます。
transform.rotation = Quaternion.Slerp(startQuaternion, lookQuaternion, turningNormalizer*turningSpeed/10f)
startQuaternionは、新しいターゲットが指定されたときのキャラクターの現在の回転です。
lookQuaternionは、キャラクターが見るべき方向であり、次のように設定されています。
destinationVector = currentWaypoint.transform.position - transform.position;
lookQuaternion = Quaternion.LookRotation(destinationVector, Vector3.up);
turnNormalizerはTime.deltaTime
インクリメントされるだけturningSpeed
で、エディターで指定される静的な値です。
問題は、ほとんどの場合、キャラクターが正常に回転する一方で、180度に近づかなければならないときに問題が発生することです。次に、時々それがジッターして回転をミラーリングします:
この不十分に描かれた画像では、キャラクター(右側)が左側の円に向かって回転し始めます。左または右に回転するだけでなく、この「ミラーダンス」が開始されます。
- 新しいフェーシングに向かって回転し始めます
- その後、突然同じ角度にスナップしますが、反対側で回転し続けます
ターゲットを見るまで、この「ミラーリング」を長時間実行します。これは、四元数、slerping / lerpingなどの問題ですか?
EDIT1: どうやら、問題は回転自体から発生するのではありません。より可能性の高い問題は、キャラクターが回転しているときに面に向かって移動することです。キャラクターが動くことを許可されているとき、向きとターゲットの間の角度を制限することで、ジッター/ミラーリング回転が減少し、時には解消されます。
もちろん、これはさらに多くの疑問を投げかけますが、なぜ問題なくキャラクターが同時に移動および回転できないのですか?運動に使用されるコード:
transform.Translate(Vector3.forward * runningSpeed/10f * Time.deltaTime);