2016-07-21 22 views
2

Im Inspektor für ein GameObject verwende ich die Startdrehung ist "-90", aber wenn ich print(transform.eulerAngles.x) laufen bekomme ich 270 (dito für transform.localEulerAngles.x).Unity3d - eulerAngles (lokal und global) völlig anders als was in Inspektor ist

Wenn ich die gameObject nach unten kippen, wird der Wert des Inspector X größer (sagen wir bis -85) wie es sollte. Die gedruckte transform.eulerAngles.x wird auch größer, sagen zu 274.

Hier ist, wo die Dinge seltsam erhalten:

Wenn ich die gameObject kippen nach oben der Inspektor Koordinate x wird kleiner (ex, bis -95), wie es sollte, ABER der gedruckte eulerAngle.x Wert wird größer (hier zu 274). Wenn ich also das Objekt von eulerAngle.x um 270 ° nach oben oder unten rotiere, steigt der x-Wert unabhängig davon.

Ich mache hier definitiv etwas falsch, aber nach einer Menge von Fehlersuche kann ich immer noch nicht herausfinden, was. Irgendwelche Gedanken?

+0

Ist das Gameobject ein Kind von einem anderen Gameobject? – Programmer

+0

Nein, ist es nicht. :/ – papathor

+0

es wird immer und immer wieder in der Einheitsdokumentation erklärt. ** EINFACH VERWENDEN 'Drehen' **. So einfach ist das. – Fattie

Antwort

2

eulerAngles sind in Unity3D ein komplizierter Prozess. Sie sollten niemals die Werte in Ihrem Inspektor oder über Code erhöhen/verringern oder setzen. Sollte nur absolute Werte zum Lesen und Einstellen verwenden.

Die Werte nicht erhöhen oder verringern, da dies fehlschlägt, wenn der Winkel 360 Grad überschreitet. Transform.Rotate ist das, was Sie stattdessen verwenden.

Hier ist der Beispielcode in dem Beispiel Unity3D Dokumentation:

using UnityEngine; 
using System.Collections; 

public class ExampleClass : MonoBehaviour { 
    public float yRotation = 5.0F; 
    void Update() { 
     yRotation += Input.GetAxis("Horizontal"); 
     transform.eulerAngles = new Vector3(10, yRotation, 0); 
    } 
    void Example() { 
     print(transform.eulerAngles.x); 
     print(transform.eulerAngles.y); 
     print(transform.eulerAngles.z); 
    } 
} 

Diese direkt aus der Dokumentation entnommen: https://docs.unity3d.com/ScriptReference/Transform-eulerAngles.html

Auch Transform.Rotate Dokumentation: https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

Der Inspektor wird Ihnen fast immer einen funky Wert geben, wenn Sie es aufzeichnen. Die einzige Konsistenz, die Sie erhalten werden, ist print (transform.rotation). Dies sollte ähnliche Werte für Inspektor und Code beibehalten.

+0

Ich habe die Dokumentation gelesen. Ich inkrementiere oder dekrementiere die Werte nicht, sondern lese sie nur. EDIT: Auch der Teil über print (transform.rotation) ist nicht wahr. transform ist eine Quaternion, also gibt es nur die x, y, z, w Quaternion Werte, nicht die eulerAngles. – papathor

+0

versuchen, logging transform.rotation.eulerAngles.x. Neugierig, die Ausgabe zu sehen. – ApolloSoftware

+0

Die Ausgabe ist die gleiche für transform.rotation.eulerAngles.x und transform.meierAngles.x, dito für localEulerAngles.x – papathor

0

für jeden Wert in transform.eulerAngles oder transform.localEulerAngles wenn es eine parent: -

if (value > 270) 
    value =- 360;