Tourner en douceur
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 45 sur 71.
Définir directement transform.rotation sur une nouvelle rotation fait tourner un objet en une seule image. Quaternion.RotateTowards(current, goal, maxDegrees) renvoie current tourné vers goal d’au plus maxDegrees, sans jamais dépasser l’objectif. En utilisant turnSpeed * Time.deltaTime comme incrément, l’objet tourne à une vitesse constante et s’arrête exactement sur son objectif, comme le fait MoveTowards pour les positions. Ce tournesol suit le soleil à 30 degrés par seconde :
public Transform sun;
public float turnSpeed = 30f;
void Update()
{
Quaternion goal = Quaternion.LookRotation(sun.position - transform.position);
transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);
}Si le soleil est à 90 degrés, le tournesol met 3 secondes à le rejoindre, en tournant de 30 degrés à chaque seconde. Il tourne par le chemin le plus court, et l’objectif est recalculé à chaque image, ce qui lui permet de suivre un soleil en mouvement.
Quaternion.Slerp(a, b, t) représente la rotation située à une fraction t du trajet entre a et b, comme Vector3.Lerp le fait pour les points. Écrit sous la forme Slerp(transform.rotation, goal, 5f * Time.deltaTime) dans Update(), ce code effectue une partie de l’angle restant à chaque image : le mouvement est rapide au début, puis ralentit de plus en plus à l’approche de l’objectif ; il ne se fait jamais à vitesse constante et n’atteint jamais tout à fait l’objectif. Cette transition en douceur convient à une caméra ou à une tête qui pivote. Lorsque la vitesse de rotation est une règle du jeu, comme pour un canon qui pivote de 60 degrés par seconde, utilise RotateTowards.
Défi
MoyenFais tourner le hibou en douceur dans la direction indiquée par chaque flèche.
- Ajoute
Quaternion goal;et définis-le surtransform.rotationdansStart(). - À l’appui sur chaque flèche avec
Input.GetKeyDown, définisgoal, par exemplegoal = Quaternion.LookRotation(Vector3.right);: haut +z, droite +x, bas -z, gauche -x. - À chaque image, définis
transform.rotation = Quaternion.RotateTowards(transform.rotation, goal, turnSpeed * Time.deltaTime);.
Appuie sur « Jouer » et touche les flèches. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class Owl : MonoBehaviour
{
public float turnSpeed = 180f;
void Update()
{
// Haut, droite, bas, gauche : pivoter pour faire face à +z, +x, -z, -x à une vitesse de turnSpeed degrés par seconde.
}
}
Toutes les leçons de Physique et gameplay
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle10Projet : Évasion de l’arène
L’arèneLes chasseurs2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser3Déclencheurs
Colliders déclencheursOnTriggerEnterObjets à ramasserLes caisses gardent le resteZones mortellesEntrée et sortieRécapitulatif : clé et porteEntraînez-vous par vous-même : Playground Unity