Пожалуйста, объясните transform.rotate в Unity - PullRequest
0 голосов
/ 12 апреля 2020

Может кто-нибудь объяснить, почему этот метод не может работать как обычное движение камеры fps? Я установил Z-Axis на 0, но он меняется при тестировании. Я могу использовать Quaternion, но я действительно не могу понять, почему этот метод не работает.

void onCameraLook() {
    mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
    mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;

    transform.Rotate(-mouseY, mouseX, 0, Space.Self);
}

1 Ответ

1 голос
/ 12 апреля 2020

Если вы позвоните Rotate с помощью Space.Self, вы будете вращать объект вокруг его локальных осей. Для « нормальной fps камеры » это хорошо для вертикального вращения, вы хотите вращаться вокруг локальной оси x / right, но для горизонтального вращения вы хотите, чтобы объект вращался вокруг глобальной оси y / up. Более подробный пост см. вращение объекта по двум осям . Итак, ваш код должен быть:

void onCameraLook() {
    mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensitivity;
    mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensitivity;

    transform.Rotate(-mouseY, 0, 0, Space.Self);
    transform.Rotate(0, mouseX, 0, Space.World);        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...