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