Vector3 по двум осям.

Программирование на Юнити.

Vector3 по двум осям.

Сообщение Sandirk 15 май 2020, 12:50

Здравствуйте.

Писал скрипт для управления воздушным транспортом и столкнулся с проблемкой. Нужно, чтобы объект, на который повешен скрипт по осям крена и тангажа отклонялся на определённый угол (я управляю с геймпада и этот угол пропорционален углу наклона джойстика), а по оси рысканья он вращался пока джойстик отклонён так, что скорость вращения зависит от угла наклона джойстика. Это сложно объяснить на словах, но из скрипта дело проясняется.

Отрывок:
Синтаксис:
Используется csharp
RigBody.transform.eulerAngles = new Vector3(c * 200f, [ДАННАЯ ОСЬ НЕ ДОЛЖНА БЫТЬ ЗАДЕЙСТВОВАНА В ЭТОЙ СТРОЧКЕ], a * 200f); //Эта строчка управляет наклонами по осям крена и тангажа.
transform.Rotate(b * transform.up * YawSensitivity, Space.World); //Эта строчка управляет осью, незадействованной в строчке выше (Рысканье).
 


Но дело в том, что Vector3 не даёт объекту вращаться в оси рысканья. Можно ли как-то сделать так, чтобы одна из осей Vector3 не была задействована вообще?
Также, скорее всего, придётся управлять осями крена и тангажа (из первой строчки) в локальном пространстве. Пока тоже не совсем понятно, как это сделать.

Заранее спасибо.
Аватара пользователя
Sandirk
UNITрон
 
Сообщения: 150
Зарегистрирован: 04 фев 2019, 21:48

Re: Vector3 по двум осям.

Сообщение 1max1 15 май 2020, 13:13

Синтаксис:
Используется csharp
        var ea = RigBody.transform.eulerAngles;
        ea.x = c * 200f;
        ea.z = a * 200f;
        RigBody.transform.eulerAngles = ea;
        transform.Rotate(b * transform.up * YawSensitivity, Space.World);
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Vector3 по двум осям.

Сообщение Sandirk 15 май 2020, 13:20

1max1 писал(а):
Синтаксис:
Используется csharp
        var ea = RigBody.transform.eulerAngles;
        ea.x = c * 200f;
        ea.z = a * 200f;
        RigBody.transform.eulerAngles = ea;
        transform.Rotate(b * transform.up * YawSensitivity, Space.World);


Спасибо, то, что надо. А то я пытался через векторы сделать.
Синтаксис:
Используется csharp
transform.eulerAngles = (Vector3.right * c * 200f) + (Vector3.forward * a * 200f);
 

Но они конфликтовали с осью рысканья.

Ваш код работает как надо.
Аватара пользователя
Sandirk
UNITрон
 
Сообщения: 150
Зарегистрирован: 04 фев 2019, 21:48

Re: Vector3 по двум осям.

Сообщение Cr0c 17 май 2020, 00:57

Аватара пользователя
Cr0c
Адепт
 
Сообщения: 3035
Зарегистрирован: 19 июн 2015, 13:50
Skype: cr0c81


Вернуться в Скрипты

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


cron