Angles d’Euler
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 40 sur 63.
transform.eulerAngles est la rotation d’un objet représentée par trois angles en degrés, autour des axes x, y et z. Unity stocke la rotation sous forme de quaternion (voir la prochaine leçon) et recalcule les trois angles à chaque fois que vous les lisez, toujours sous forme de valeurs comprises entre 0 et 360. Inclinez une planche de -10 degrés autour de z et lisez la valeur obtenue :
transform.rotation = Quaternion.Euler(0, 0, -10);
Debug.Log(transform.eulerAngles.z); // 350Vous avez défini -10, mais le code lit 350 ; ainsi, if (transform.eulerAngles.z < -5) n’est jamais vrai. La valeur lue peut modifier les trois nombres : définissez (100, 0, 0) et vous lirez (80, 180, 180), soit la même orientation exprimée autrement. Quaternion.Euler(x, y, z) fonctionne dans l’autre sens et accepte n’importe quel angle : -10, 350 et 710 produisent la même rotation. Conservez donc l’angle dans un float qui vous appartient, modifiez-le et limitez-le à cet endroit, puis définissez la rotation entière à partir de celui-ci. Cette balançoire s’incline avec les flèches et s’arrête à 20 degrés dans chaque sens :
public float speed = 40f;
float tilt;
void Update()
{
tilt += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
tilt = Mathf.Clamp(tilt, -20f, 20f);
transform.rotation = Quaternion.Euler(0, 0, tilt);
}Ne modifiez pas une seule des composantes des angles que vous lisez. transform.eulerAngles.x = 110; ne compile pas (CS1612, comme avec position.x), et copier eulerAngles, modifier x, puis réaffecter la copie repart de la version des angles de Unity. Après avoir défini (100, 0, 0), cette copie vaut (80, 180, 180) ; ajoutez 10 à x et vous obtenez (90, 180, 180), ce qui ramène l’objet à 90 au lieu de le faire pivoter jusqu’à 110.
Défi
MoyenLa caméra de sécurité sur le poteau doit balayer de gauche à droite en continu : depuis la position face à l’avant (0 degré autour de y), elle tourne à droite, y augmente, à la vitesse de speed (30) degrés par seconde, fait demi-tour à limit (45), balaie jusqu’à -limit (-45), fait de nouveau demi-tour, et ainsi de suite. Pendant tout ce temps, elle conserve son inclinaison vers le bas de tilt (20) degrés autour de x.
Appuie sur Play : le script de départ fait demi-tour à 45, mais à -45, il continue sa rotation. Découvre pourquoi et corrige le script, puis appuie sur Check.
Essayez vous-même
using UnityEngine;
public class Sweep : MonoBehaviour
{
public float speed = 30f;
public float limit = 45f;
public float tilt = 20f; // degrés vers le bas, autour de x
float direction = 1f;
void Update()
{
transform.Rotate(0, direction * speed * Time.deltaTime, 0, Space.World);
float angle = transform.eulerAngles.y;
if (angle > limit) direction = -1f;
if (angle < -limit) direction = 1f;
}
}
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 à rebours2Collisions
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