Unity のクォータニオン Slerp: インクリメンタル回転ガイド
Unity エンジンでは、時間の経過とともにオブジェクトを徐々に回転させることが、動的なシーンを作成するために重要です。 Quaternion.Slerp
は、回転をスムーズに補間できる強力なツールです。
Quaternion.Slerp について
Quaternion.Slerp
は、入力として 2 つの四元数 (回転を表す) と混合係数を受け取ります。 2 つの入力四元数の間で補間された新しい四元数を返します。
時間 (t) とも呼ばれる混合係数の範囲は 0 から 1 です。 t が 0 の場合、出力四元数は最初の入力四元数と等しくなります。 t が 1 の場合、出力四元数は 2 番目の入力四元数と等しくなります。
Lerp と Slerp の比較
(2 つの値の間を線形補間する) とは異なり、Mathf.Lerp
は 2 つの回転間の最短パスに沿って補間します。これは、偶発的な反転や揺れを避けるために回転に不可欠です。 Quaternion.Slerp
実装方法
時間の経過に伴う回転
オブジェクトを特定の回転方向に徐々に回転するには、次のコードを使用できます:
<code class="language-C#">void Start() { Quaternion rotation2 = Quaternion.Euler(new Vector3(0, 0, 90)); StartCoroutine(RotateObject(objectToRotate, rotation2, 3f)); } IEnumerator RotateObject(GameObject gameObjectToMove, Quaternion newRot, float duration) { Quaternion currentRot = gameObjectToMove.transform.rotation; float counter = 0; while (counter < duration) { counter += Time.deltaTime; gameObjectToMove.transform.rotation = Quaternion.Slerp(currentRot, newRot, counter / duration); yield return null; } }</code>
増分角度回転
オブジェクトを特定の角度だけ回転させるには、次のコードを使用します:
<code class="language-C#">void Start() { StartCoroutine(RotateObject(objectToRotate, new Vector3(0, 0, 90), 3f)); } IEnumerator RotateObject(GameObject gameObjectToMove, Vector3 eulerAngles, float duration) { Vector3 newRot = gameObjectToMove.transform.eulerAngles + eulerAngles; Vector3 currentRot = gameObjectToMove.transform.eulerAngles; float counter = 0; while (counter < duration) { counter += Time.deltaTime; gameObjectToMove.transform.eulerAngles = Vector3.Slerp(currentRot, newRot, counter / duration); yield return null; } }</code>
概要
Unity エンジンでのスムーズかつ効率的な回転変換のための信頼できるソリューションを提供します。その基礎を理解し、提供されたコード スニペットを実装することで、ゲーム オブジェクトの回転タイミングを効果的に制御し、プレイヤーにダイナミックで魅力的なゲーム エクスペリエンスを生み出すことができます。 Quaternion.Slerp
以上がQuaternion.Slerp はどのようにして Unity でスムーズな増分回転を可能にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。