Страница 1 из 1

Странное поведение углов поворота в Unity [Решено]

СообщениеДобавлено: 03 окт 2013, 02:54
scapemb
Добрый ночь.
Столкнулся со странным поведением углов при моделировании полета самолета в 2D. Суть в том, что при обычных условиях на Rotation:
Синтаксис:
Используется csharp
public float speed = 2;
        public float nitro = 100;
        // Use this for initialization
        void Start () {
       
        }
        void ChangeSpeed(){
                        if(transform.rotation.x < 90 && transform.rotation.x > 0 ){
                                if(speed >= 0.1f)
                                        speed -= 0.1f;
                        }
                        else {
                        if(speed < 15)
                                speed += 0.1f;
                        }
        }

        // Update is called once per frame
        void Update () {
        //inside the Update method
                ChangeSpeed();
                       
                if(Input.GetKey("right"))
                {
                var right = Quaternion.Euler(1,0,0);
                transform.rotation *= right;   
                       
                }
                if(Input.GetKey("left"))
                {
                var left = Quaternion.Euler(-1,0,0);
                transform.rotation *= left;    
                       
                }
                transform.Translate(0, 0, speed * Time.deltaTime);
        }

самолет должен ускорятся при крене вниз и при задирании носа терять скорость. Сначала все по плану, но после поворота на 360 градусов в любую сторону условия срабатывают наоборот (т.е. при задирании носа он начинает падать в небо, при крене вниз тормозит). Вращение происходит относительно оси X. На других осях ситуация повторяется с единственным отличием в том, что при этом другие углы начинают изменятся на 90/180/270 градусов произвольно. Были подозрения на gimbal lock, но они не подтвердились.

Re: Странное поведение углов поворота в Unity

СообщениеДобавлено: 03 окт 2013, 03:26
waruiyume
Синтаксис:
Используется csharp
float dot = Vector3.Dot(transform.forward, Vector3.up);//1-направлен вверх, -1-направлен вниз, 0-направлен вбок.
bool upOrDn = dot > 0f;

Re: Странное поведение углов поворота в Unity

СообщениеДобавлено: 03 окт 2013, 03:58
scapemb
Спасибо большое. А не знаете, в чем проблема этого решения? Может где-то есть информация про эти углы?

Re: Странное поведение углов поворота в Unity [Решено]

СообщениеДобавлено: 03 окт 2013, 05:09
waruiyume
Синтаксис:
Используется csharp
if(transform.rotation.x

transform.rotation- кватернион.
Синтаксис:
Используется csharp
if(transform.rotation.eulerAngles.x

Но может случится нечто вроде gimbal lock.

Re: Странное поведение углов поворота в Unity [Решено]

СообщениеДобавлено: 03 окт 2013, 06:52
Johnson
Рекомендую к чтению (минимум 2 раза перечитать):
http://habrahabr.ru/post/183116/
http://habrahabr.ru/post/183908/