Angles d’Euler
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 42 sur 71.
transform.eulerAngles correspond à la rotation d'un objet, exprimée en trois angles en degrés autour des axes x, y et z. Unity stocke la rotation sous forme de quaternion (dans la leçon suivante) 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 lecture peut modifier les trois nombres : si vous définissez (100, 0, 0), vous lisez (80, 180, 180), soit la même orientation écrite 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 complète à partir de cette valeur. Cette balançoire à bascule 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 composante 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 revient à partir 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
MoyenCorrige le balayage de la caméra : elle repart en sens inverse à 45, mais pas à -45, car eulerAngles.y lit -45 comme 315.
- Ajoute un champ
float angle;et remplace les deux premières lignes deUpdate()parangle += direction * speed * Time.deltaTime;. - Garde les deux lignes
if, puis définis la rotation complète :transform.rotation = Quaternion.Euler(tilt, angle, 0);.
Appuie sur « Jouer » : la caméra pivote de 45 à -45, puis revient, inclinée vers le bas. Puis appuie sur « Vérifier ».
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;
}
}
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