Tourner en douceur
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 43 sur 63.
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, il faut 3 secondes au tournesol, à raison de 30 degrés à chaque fois. 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) correspond à la rotation située à une fraction t du trajet de a à b, tout comme Vector3.Lerp le fait pour les points. Écrit sous la forme Slerp(transform.rotation, goal, 5f * Time.deltaTime) dans Update(), il parcourt une partie de l’angle restant à chaque image : rapide au début, puis de plus en plus lent à l’approche de l’objectif, jamais à une vitesse fixe et sans jamais l’atteindre tout à fait. Cette accélération progressive convient à une caméra ou à une tête qui tourne. Lorsque la vitesse de rotation est une règle du jeu, comme pour un canon qui tourne de 60 degrés par seconde, utilise RotateTowards.
Défi
MoyenLe hibou se tourne pour regarder dans la direction que tu lui indiques. Chaque flèche lui donne une nouvelle direction à suivre : haut +z, droite +x, bas -z, gauche -x. Quand tu appuies sur une touche, il commence à se tourner vers cette direction à turnSpeed (180) degrés par seconde, à une vitesse constante, et termine son virage même après que tu as relâché la touche, en s’arrêtant exactement dans la nouvelle direction.
Appuie sur Play, appuie sur les flèches, puis sur Check.
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 à la vitesse de turnSpeed degrés par seconde.
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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 : tourelle2Collisions
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 à ramasser