2016-07-21 5 views
2

В инспекторе для gameObject я использую начальное вращение «-90», но когда я запускаю print(transform.eulerAngles.x), я получаю 270 (то же, что и для transform.localEulerAngles.x).Unity3d - eulerAngles (локальный и глобальный) полностью отличается от того, что находится в инспекторе

Если я наклоняю gameObject вниз, значение индекса X становится больше (скажем, до -85), как и должно быть. Напечатанный transform.eulerAngles.x также становится больше, говорят 274.

Вот где все становится странно:

Если я наклонить gameObject вверх инспектор координата х становится все меньше (ех, до -95), как и положено, НО печатное значение eulerAngle.x получает BIGGER (здесь до 274). Поэтому, если я поворачиваю объект вверх или вниз от eulerAngle.x, равного 270, значение x увеличивается независимо.

Я определенно делаю что-то нехорошо здесь, но после многих проблем с поиском я все еще не могу понять, что. Есть предположения?

+0

ли геймобжекты ребенок другого GameObject? – Programmer

+0

Нет, это не так. :/ – papathor

+0

объясняется снова и снова в документации на единство. ** ПРОСТО ИСПОЛЬЗОВАТЬ «Повернуть» **. Это так просто. – Fattie

ответ

2

eulerAngles - сложный процесс в Unity3D. Вы никогда не должны увеличивать/уменьшать или устанавливать значения в своем инспекторе или через код. Следует использовать только абсолютные значения для чтения и установки.

Не увеличивайте и не уменьшайте значения, так как оно не срабатывает, когда угол превышает 360 градусов. Transform.Rotate - это то, что вы используете вместо этого.

Вот пример кода в примере Unity3D документации:

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); 
    } 
} 

Это взято непосредственно из документации: https://docs.unity3d.com/ScriptReference/Transform-eulerAngles.html

Также Transform.Rotate документация: https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

Инспектор почти всегда даст вам фанковое значение и при его регистрации. Единственная последовательность, которую вы получите, - print (transform.rotation). Это должно сохранять одинаковые значения для инспектора и кода.

+0

Я прочитал документацию. Я не увеличиваю или уменьшаю значения, просто читая их. EDIT: Кроме того, часть о print (transform.rotation) неверна. transform является кватернионом, поэтому его печать даст вам только значения x, y, z, w quaternion, а не eulerAngles. – papathor

+0

попробуйте logging transform.rotation.eulerAngles.x. Любопытно видеть выход. – ApolloSoftware

+0

Вывод такой же для transform.rotation.eulerAngles.x и transform.eulerAngles.x, ditto для localEulerAngles.x – papathor

0

для каждого значения в transform.eulerAngles или transform.localEulerAngles, если он имеет родителя: -

if (value > 270) 
    value =- 360;