Answer the question
In order to leave comments, you need to log in
Why does the camera follow the mouse incorrectly on the Y axis?
Written code by which the camera (from the first person) should follow the mouse pointer. On the x-axis (horizontal) everything works as it should. When trying to follow the Y (vertical) axis, the camera simply flips 90 degrees. Screenshot example.
The code:
using System.Collections;
using UnityEngine;
public class MouseLook : MonoBehaviour {
// обьявляем общедоступные переменные скорости вращения по горизонтали и вертикали
public float sensitivityX = 9f;
public float sensitivityY = 9f;
// обьявляем общедоступные переменные ограничивающие вращение по вертикали и горизонтали
public float minimumHor = -360;
public float maximumHor = 360;
public float minimumVert = -60;
public float maximumVert = 60;
// обьявляем оригинальное положение которое определяется автоматически
private Quaternion originalRot;
private float rotX = 0; // вспомогательная переменная для расчета вращения по горизонтали
private float rotY = 0; // вспомогательная переменная для расчета вращения по вертикали
private void Start() {
// отключаем у твердого тела поворот по физике по умолчанию (заморозим вращение)
Rigidbody body = GetComponent<Rigidbody>();
if (body != null) body.freezeRotation = true;
// считываем оригинальную позицию вращения для начала счета
originalRot = transform.localRotation;
}
void Update () {
// счетаем позицию мыши по горизонтали и по вертикали
rotX += Input.GetAxis("Mouse X") * sensitivityX;
rotY += Input.GetAxis("Mouse Y") * sensitivityY;
// ограничиваем углы поворота по вертикали и горизонтали
rotX = rotX % 360;
rotY = rotY % 360;
// ограничиваем движение по горизонтали и вертикали максимальным и минимальным положениями камеры
rotX = Mathf.Clamp(rotX, minimumHor, maximumHor);
rotY = Mathf.Clamp(rotY, minimumVert, maximumVert);
// посчитаем значение квартернионов по вертикали и горизонтали
Quaternion quaternionX = Quaternion.AngleAxis(rotX, Vector3.up);
Quaternion quaternionY = Quaternion.AngleAxis(rotY, Vector3.left);
transform.localRotation = originalRot * quaternionX * quaternionY;
}
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question