Unity C # Quaternion Rotation Исправление ориентации

Привет, я работал над методом поворота камеры.

Я пытаюсь повернуть камеру с помощью мыши. Мне нужно, чтобы горизонтальное вращение было параллельно плоскости x, y (моя доска), а вертикальное вращение было ограничено определенным углом (что-то вроде 40 градусов до -40).

Я использую кватернионы для поворота камеры.

Вот мой код пока

float angle = (mouseX_Current - mouseX_ActionStart) * 0.25f;
Quaternion horizontalRotationQuat = Quaternion.AngleAxis(angle, Vector3.up);

angle = (mouseY_Current - mouseY_ActionStart) * 0.25f;
Quaternion verticalRotationQuat = Quaternion.AngleAxis(angle, Vector3.right);

Camera.main.transform.rotation *= (horizontalRotationQuat * verticalRotationQuat);

Моя проблема в том, что, добавив эти вращения, связанные с мышью, к моему текущему кватерниону ориентации камеры, камера больше не будет параллельна плоскости (x, y), на которую она смотрит.

Я пытался создать кватернион коррекции для добавления к кватерниону камеры после добавления этих вращений, связанных с мышью, но я не могу найти правильный.

Quaternion currentOrientationQuat = Camera.main.transform.rotation;

Quaternion corretionQuat = new Quaternion(0.0f, 0.0f, - currentOrientationQuat.z, currentOrientationQuat.w);

Camera.main.transform.rotation *= corretionQuat;

Если бы кто-то мог мне помочь в этом, я был бы очень благодарен. Спасибо.

Извините за английский, а не за мой основной язык.


person user2917126    schedule 24.10.2013    source источник


Ответы (1)


Решил это другим методом

float angle = (mouseX_Current - mouseX_ActionStart) * 0.25f;
Camera.main.transform.Rotate(0.0f, 0.0f, angle, Space.World);

angle = (mouseY_Current - mouseY_ActionStart) * 0.25f;
Camera.main.transform.Rotate(angle, 0.0f, 0.0f, Space.Self);

Ощущение тупости, увидев, как легко это сделать. Для этого даже не понадобились кватернионы.

person user2917126    schedule 24.10.2013