Плавное обнуление скорости

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

Плавное обнуление скорости

Сообщение skwardj 23 янв 2011, 15:29

Итак, у меня есть летательный аппарат. При изменении GetAxis("Horizontal"); он должен лететь стрейфом вбок, а когда кнопку отпустили, то должна возникнуть стабилизирующая сила, направленная противоположно, плавно сбрасывая скорость корабля. Моя проблема в том, что я добавляю силу методом rigidbody.AddRelativeForce и когда стабилизирующая сила остановила корабль он продолжает лететь вбок. Другими словами я создал силу а как от нее избавиться не знаю о_о Есть предложение по алгоритму?
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение bgeyts667 23 янв 2011, 17:55

Попробуйте использовать rigidbody.drag.
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Плавное обнуление скорости

Сообщение skwardj 23 янв 2011, 18:25

Предлагается установить высокий drag в какой момент? И после чего собсно его обнулять? я просто пробовал с rigidbody.sleep(), но он просто срабатывает всегда когда скорость равна нулю. я просто не могу придумать как отсечь момент, когда силы действуют и скорость равна нулю. Если я это сделаю, то проблема решена.
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение skwardj 23 янв 2011, 18:38

как вариант конечно можно сделать последовательность
if (vel.x==0) {
rigidbody.Sleep();
rigidbody.WakeUp();
}
где vel.x-относительная гор. скорость.
Скажется ли это сильно на производительности?
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение bgeyts667 23 янв 2011, 18:49

skwardj писал(а):я просто не могу придумать как отсечь момент, когда силы действуют и скорость равна нулю. Если я это сделаю, то проблема решена.

rigidbody.velocity - скорость объекта. Если она не равна нулю, значит какие-нибудь силы да действуют.
_bgeyts667@gmail.com
Аватара пользователя
bgeyts667
UNITрон
 
Сообщения: 175
Зарегистрирован: 25 авг 2010, 08:30
  • ICQ

Re: Плавное обнуление скорости

Сообщение Zaicheg 23 янв 2011, 18:51

Попробуйте использовать rigidbody.drag.

Или rigidbody.velocity + Vector3.Lerp
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Плавное обнуление скорости

Сообщение skwardj 23 янв 2011, 21:10

От того что скорость обнуляется, силы не исчезают
Zaicheg
спасибо за ответ, но не понял как именно применять lerp и что это вообще такое.
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение skwardj 24 янв 2011, 16:58

Прошу прощение за поспешный ответ. Нужного эффекта я добился с vector3.movetowards, но есть одна проблема.
Так работает
rigidbody.velocity=Vector3.MoveTowards(rigidbody.velocity,Vector3(0,rigidbody.velocity.y,rigidbody.velocity.z), stabStrafe);
А так не работает
vel=Vector3.MoveTowards(vel,Vector3(0,vel.y,vel.z), stabStrafe); (никакого эффекта изменения вектора не наблюдается)


vel это..
vel = transform.InverseTransformDirection (rigidbody.velocity);

мне нужна именно относительная скорость о_о
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение skwardj 25 янв 2011, 18:16

есть идеи?
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение Paul Siberdt 25 янв 2011, 18:53

А разве менять велосити не получается?
rigidbody.velocity = Vector3.Lerp(rigidbody.velocity, Vector3.zero, Time.fixedDeltaTime * someFactor );
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Плавное обнуление скорости

Сообщение skwardj 25 янв 2011, 19:44

получается, но только с глобальной
с относительной не выходит
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение Paul Siberdt 25 янв 2011, 20:14

Ну тогда делайте InverseTransformDirection, лерпайте в ноль и назначайте обратно через TransformDirection
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Плавное обнуление скорости

Сообщение skwardj 25 янв 2011, 20:27

я уже писал про это:
viewtopic.php?f=18&t=3385&p=28743#p28658

на счет
назначайте обратно через TransformDirection
имеется ввиду приведение локальной скорости в глобальную? попробую, спасибо
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24

Re: Плавное обнуление скорости

Сообщение skwardj 26 янв 2011, 22:57

Решено
skwardj
UNец
 
Сообщения: 9
Зарегистрирован: 23 янв 2011, 15:24


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

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

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