Измерить вертикальную скорость в локальной системе координат

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

Измерить вертикальную скорость в локальной системе координат

Сообщение Sandirk 25 май 2020, 18:52

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

Для правильной работы скрипта нужно измерять скорость движения компонента RigidBody в локальной системе координат.

Пробовал измерять скорость скриптом ниже, однако он измеряет вертикальную скорость в глобальной системе координат.
Синтаксис:
Используется csharp
var k = RigBody.velocity.y;
 


Не знаю, как указать систему координат этому "Спидометру". Подскажите идею пожалуйста.

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

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение waruiyume 25 май 2020, 19:13

transform.InverseTransformDirection(RigBody.velocity)
или так
Quaternion.Inverse(transform.rotation)*RigBody.velocity
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение 1max1 25 май 2020, 19:14

Что значит скорость в локальных координатах?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение Sandirk 25 май 2020, 19:22

1max1 писал(а):Что значит скорость в локальных координатах?


Привожу пример:

Тело падает будучи повёрнутым на 90 градусов относительно горизонта.

Скорость, измеряемая в глобальной системе координат, будет равна скорости падения объекта. (Изменению координаты Y за единицу времени)

Скорость, измеряемая в локальной системе координат, будет равна нулю тк ось Y вместе с телом будет повёрнута относительно глобальной оси Y. Чтобы локальная скорость изменялось, тело нужно будет двигать относительно той оси, что повернулась на 90 градусов вместе с объектом.

Надеюсь понятно объяснил.
Последний раз редактировалось Sandirk 25 май 2020, 19:27, всего редактировалось 1 раз.
Аватара пользователя
Sandirk
UNITрон
 
Сообщения: 150
Зарегистрирован: 04 фев 2019, 21:48

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение Sandirk 25 май 2020, 19:25

waruiyume писал(а):transform.InverseTransformDirection(RigBody.velocity)
или так
transform.rotation*RigBody.velocity


Спасибо за идею.

Vector 3 нельзя преобразовать в число (Float).
Код будет иметь ошибку в обоих случаях.

Код выглядит так:
Синтаксис:
Используется csharp
var k = transform.InverseTransformDirection(RigBody.velocity);

Test = k;

if (k < -5 & Thr > 10)
{
     /// ...
}
 

Может я что-то не понял?

Возможно его нужно ещё отдельно преобразовать в число. Если да, то как?
Последний раз редактировалось Sandirk 25 май 2020, 19:31, всего редактировалось 1 раз.
Аватара пользователя
Sandirk
UNITрон
 
Сообщения: 150
Зарегистрирован: 04 фев 2019, 21:48

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение waruiyume 25 май 2020, 19:28

Изменил пример с кватернионом он должен быть инвертирован.
Возможно его нужно ещё отдельно преобразовать в число. Если да, то как?

Точка жыыы.
(transform.InverseTransformDirection(RigBody.velocity)).y
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Измерить вертикальную скорость в локальной системе координат

Сообщение Sandirk 25 май 2020, 19:33

Точка жыыы.
(transform.InverseTransformDirection(RigBody.velocity)).y


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


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

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

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