Слишком сильная инерция при повороте объекта - Форум Игроделов
Пн, 20 Май 2024, 08:01 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Слишком сильная инерция при повороте объекта
Слишком сильная инерция при повороте объекта
kokonДата: Ср, 28 Май 2014, 19:41 | Сообщение # 1
Нет аватара
 
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Offline
Здравствуйте! Пытаюсь разобраться в скрипте полета самолета. Возникла такая проблема. Самолет вращается с помощью мышки. Когда двигаешь мышкой(даже чуть-чуть) самолет начинает вращаться слишком сильно, т.е. ему задается начальный импульс, а потом он по инерции еще проворачивается(довольно сильно). Тоже самое с движением. В итоге полет над террейном получается какой-то сумасшедший. Все крутиться и вертится. Подскажите как можно убрать или уменьшить силу инерции.
Вот процедура в которой осуществляется поворот.
Код
  void FixedUpdate()
             {
                     if(!this.rigidbody)
                             return;
                     Quaternion AddRot = Quaternion.identity;
                     Vector3 velocityTarget = Vector3.zero;               
                             AddRot.eulerAngles = new Vector3(pitch, yaw, -roll);
                     mainRot *= AddRot;
                 rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, mainRot, Time.fixedDeltaTime * RotationSpeed);
                 velocityTarget = (rigidbody.rotation * Vector3.forward) *(Speed + MoveSpeed);                       
             rigidbody.velocity = Vector3.Lerp(rigidbody.velocity,velocityTarget,Time.fixedDeltaTime);            
                     yaw = Mathf.Lerp(yaw,0,Time.deltaTime);
                     MoveSpeed = Mathf.Lerp(MoveSpeed,Speed,Time.deltaTime);         }
  

Я так понимаю, что дело в строке
Код

rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, mainRot, Time.fixedDeltaTime * RotationSpeed);

Что сам метод Lerp анимирует перевод одного кватерниона в другой. Пытался менять значение RotationSpeed, просто меняется скорость поворота, но инерция остается.
 
СообщениеЗдравствуйте! Пытаюсь разобраться в скрипте полета самолета. Возникла такая проблема. Самолет вращается с помощью мышки. Когда двигаешь мышкой(даже чуть-чуть) самолет начинает вращаться слишком сильно, т.е. ему задается начальный импульс, а потом он по инерции еще проворачивается(довольно сильно). Тоже самое с движением. В итоге полет над террейном получается какой-то сумасшедший. Все крутиться и вертится. Подскажите как можно убрать или уменьшить силу инерции.
Вот процедура в которой осуществляется поворот.
Код
  void FixedUpdate()
             {
                     if(!this.rigidbody)
                             return;
                     Quaternion AddRot = Quaternion.identity;
                     Vector3 velocityTarget = Vector3.zero;               
                             AddRot.eulerAngles = new Vector3(pitch, yaw, -roll);
                     mainRot *= AddRot;
                 rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, mainRot, Time.fixedDeltaTime * RotationSpeed);
                 velocityTarget = (rigidbody.rotation * Vector3.forward) *(Speed + MoveSpeed);                       
             rigidbody.velocity = Vector3.Lerp(rigidbody.velocity,velocityTarget,Time.fixedDeltaTime);            
                     yaw = Mathf.Lerp(yaw,0,Time.deltaTime);
                     MoveSpeed = Mathf.Lerp(MoveSpeed,Speed,Time.deltaTime);         }
  

Я так понимаю, что дело в строке
Код

rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, mainRot, Time.fixedDeltaTime * RotationSpeed);

Что сам метод Lerp анимирует перевод одного кватерниона в другой. Пытался менять значение RotationSpeed, просто меняется скорость поворота, но инерция остается.

Автор - kokon
Дата добавления - 28 Май 2014 в 19:41
PinkPanterДата: Ср, 02 Июл 2014, 01:30 | Сообщение # 2
Нет аватара
 
Сообщений: 15
Награды: 0
Репутация: 0
Статус: Offline
rigidbody.rotation всегда увеличивается, и никогда не стремится к 0
Пропишите где то
Код
rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, Quaternion.identity, Time.smoothDeltaTime * (по эксперементируйте со скоростью));
 
Сообщениеrigidbody.rotation всегда увеличивается, и никогда не стремится к 0
Пропишите где то
Код
rigidbody.rotation = Quaternion.Lerp(rigidbody.rotation, Quaternion.identity, Time.smoothDeltaTime * (по эксперементируйте со скоростью));

Автор - PinkPanter
Дата добавления - 02 Июл 2014 в 01:30
Форум Игроделов » UNITY3D » ОБЩИЕ ВОПРОСЫ » Слишком сильная инерция при повороте объекта
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024