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

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

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

Сообщение scapemb 03 окт 2013, 02:54

Добрый ночь.
Столкнулся со странным поведением углов при моделировании полета самолета в 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, но они не подтвердились.
Последний раз редактировалось scapemb 03 окт 2013, 03:58, всего редактировалось 1 раз.
scapemb
UNец
 
Сообщения: 2
Зарегистрирован: 03 окт 2013, 02:40

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

Сообщение waruiyume 03 окт 2013, 03:26

Синтаксис:
Используется csharp
float dot = Vector3.Dot(transform.forward, Vector3.up);//1-направлен вверх, -1-направлен вниз, 0-направлен вбок.
bool upOrDn = dot > 0f;
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение scapemb 03 окт 2013, 03:58

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

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

Сообщение waruiyume 03 окт 2013, 05:09

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

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

Но может случится нечто вроде gimbal lock.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

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

Сообщение Johnson 03 окт 2013, 06:52

Рекомендую к чтению (минимум 2 раза перечитать):
http://habrahabr.ru/post/183116/
http://habrahabr.ru/post/183908/
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 16