Euler-Winkel
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 40 von 63.
transform.eulerAngles ist die Drehung eines Objekts als drei Winkel in Grad um x, y und z. Unity speichert die Drehung als Quaternion (in der nächsten Lektion) und berechnet die drei Winkel jedes Mal neu, wenn du sie ausliest, stets als Werte von 0 bis 360. Neige ein Brett um -10 Grad um z und lies den Wert wieder aus:
transform.rotation = Quaternion.Euler(0, 0, -10);
Debug.Log(transform.eulerAngles.z); // 350Du setzt -10, aber der Code liest 350 aus. Daher ist if (transform.eulerAngles.z < -5) niemals wahr. Beim Auslesen können sich alle drei Zahlen ändern: Setze (100, 0, 0), und du erhältst (80, 180, 180), dieselbe Ausrichtung, nur anders dargestellt. Quaternion.Euler(x, y, z) funktioniert in die andere Richtung und akzeptiert jeden Winkel: -10, 350 und 710 erzeugen dieselbe Drehung. Behalte den Winkel also in einem eigenen float, ändere und begrenze ihn dort und setze daraus die gesamte Drehung. Diese Wippe neigt sich mit den Pfeiltasten und stoppt bei 20 Grad in beide Richtungen:
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);
}Ändere nicht einen Teil der ausgelesenen Winkel. transform.eulerAngles.x = 110; lässt sich nicht kompilieren (CS1612, wie bei position.x), und wenn du eulerAngles kopierst, x änderst und die Kopie wieder zuweist, verwendest du dabei Unitys Version der Winkel als Ausgangspunkt. Nachdem du (100, 0, 0) gesetzt hast, ist diese Kopie (80, 180, 180); addierst du 10 zu x, erhältst du (90, 180, 180). Dadurch wird das Objekt wieder auf 90 statt weiter auf 110 gedreht.
Aufgabe
MittelDie Sicherheitskamera am Mast soll gleichmäßig von einer Seite zur anderen schwenken: Ausgehend von der Ausrichtung nach vorn (0 Grad um y) dreht sie sich mit speed (30) Grad pro Sekunde nach rechts, wobei y zunimmt, dreht bei limit (45) um, schwenkt bis zu -limit (-45), dreht wieder um und so weiter. Die ganze Zeit behält sie ihre Neigung nach unten von tilt (20) Grad um x bei.
Drücke auf Play: Das Startskript dreht bei 45 um, aber bei -45 dreht es weiter. Finde heraus, warum, und korrigiere das Skript. Drücke dann auf Check.
Probier es selbst
using UnityEngine;
public class Sweep : MonoBehaviour
{
public float speed = 30f;
public float limit = 45f;
public float tilt = 20f; // Grad nach unten, um 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;
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand