Получить упрощенное вращение объекта

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

Во-первых, это вращение игрового объекта (0,0,0). когда я поворачиваю его вперед, он становится (90,0,0). Нет проблем. Но после этого, когда я поворачиваю его во второй раз, он не становится (180,0,0). это (0,180,180). Как я могу предотвратить единство, чтобы сделать это.

2 ответа

Попробуйте использовать углы Эйлера вместо кватернионов, они намного проще, вот пример:

transform.eulerAngles = new Vector3(180, 0, 0);

Существует несколько способов представления поворота с углами Эйлера. Когда вы конвертируете вращение вашего GameObject (хранится внутри как кватернион) в углы Эйлера (используя либо transform.eulerAngles или же transform.rotation.eulerAngles Вы можете не получить ожидаемого результата.

Вы можете обойти это, сохранив Vector3 (назовем его currentRotation) содержащий вращение вашего объекта в углах Эйлера, и построить из него кватернионы, используя Quaternion.Euler(currentRotation), Вы можете выполнить интерполяцию, рассчитав вращение цели (targetRotation) как Vector3, а затем построить кватернион для него, прежде чем делать Quaternion.Lerp:

var targetRotationQuaternion = Quaternion.Euler(targetRotation);
var currentRotationQuaternion = Quaternion.Euler(currentRotation);
transform.rotation = Quaternion.Lerp(currentRotationQuaternion, targetRotationQuaternion, *your t*);

Кстати, этот ответ очень похож на комментарий на http://answers.unity3d.com/questions/667037/transformrotationeulerangles-not-accuarate.html но его стоит воспроизвести здесь на тот случай, если его когда-нибудь уберут.

Другие вопросы по тегам