Как я могу заблокировать вращение оси Z моей камеры в Unity? - PullRequest
0 голосов
/ 31 января 2019

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

void FixedUpdate()
{
    transform.Rotate(-Input.GetAxis("Mouse Y") * rotationspeed * Time.deltaTime, Input.GetAxis("Mouse X") * rotationspeed * Time.deltaTime, 0);
}

Проблема в том, что после ее поворота камера начинает вращаться и по оси Z.Что я должен сделать, чтобы заблокировать вращение оси Z камеры?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Transform.Rotate имеет необязательный параметр

Space relativeTo = Space.Self

, поэтому по умолчанию он установлен на Sapce.Self, поэтому он вращается вокруг локальных осейobject.

Итак, когда вы смотрите вниз, меняя местную ось X, ваша локальная ось Y больше не направлена ​​прямо вверх, а скорее направлена ​​немного вперед.Поэтому, если вы теперь вращаетесь вокруг этой локальной оси Y, ваш локальный горизонт неожиданно больше не выровнен с мировым горизонтом.


Что вы хотите сделать вместо этого (вы можете увидеть это также в примере вссылка выше) вращается вокруг оси Y в мировом пространстве , но вращается вокруг оси X в локальном пространстве

вот так

[SerializeField] private float rotationspeed;

private void FixedUpdate()
{
    // rotate around global world Y
    transform.Rotate(Input.GetAxis("Mouse X") * rotationspeed * Time.deltaTime, 0, 0, Space.World);

    // rotate around local X
    transform.Rotate(0, -Input.GetAxis("Mouse Y") * rotationspeed * Time.deltaTime, 0);
}
0 голосов
/ 31 января 2019

Если вы хотите повернуть объект по двум осям, третья ось будет вращаться по умолчанию, вы не можете заблокировать это, потому что это факт реального мира.Попробуйте это в реальном мире, 3D-объект вращается, любые две оси будут вращаться автоматически. Если вы вращаете одну ось, две другие будут зафиксированы.Благодарю.

...