Quaternion Slerp dans Unity : Guide de la rotation incrémentielle
Dans le moteur Unity, la rotation progressive des objets au fil du temps est essentielle à la création de scènes dynamiques. Quaternion.Slerp
est un outil puissant qui vous permet d'interpoler en douceur les rotations.
Comprendre Quaternion.Slerp
Quaternion.Slerp
prend en entrée deux quaternions (représentant les rotations) et un facteur de mélange. Il renvoie un nouveau quaternion qui est interpolé entre les deux quaternions d'entrée.
Le facteur de mélange, également appelé temps (t), varie de 0 à 1. Lorsque t vaut 0, le quaternion de sortie est égal au premier quaternion d’entrée. Lorsque t vaut 1, le quaternion de sortie est égal au deuxième quaternion d’entrée.
Comparaison de Lerp et Slerp
Contrairement à (qui interpole linéairement entre deux valeurs), Mathf.Lerp
interpole le long du chemin le plus court entre deux rotations. Ceci est essentiel pour la rotation afin d’éviter tout retournement ou secousse accidentel. Quaternion.Slerp
Comment le mettre en œuvre
Rotation dans le temps
Pour faire pivoter progressivement un objet dans un sens de rotation spécifique, vous pouvez utiliser le code suivant :
<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>
Rotation d'angle incrémentale
Pour faire pivoter simplement un objet selon un angle spécifique, utilisez ce 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>
Résumé
Fournit une solution fiable pour des transformations de rotation fluides et efficaces dans le moteur Unity. En comprenant ses principes fondamentaux et en implémentant les extraits de code fournis, vous pouvez contrôler efficacement le timing de rotation de vos objets de jeu, créant ainsi une expérience de jeu dynamique et engageante pour vos joueurs. Quaternion.Slerp
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!