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;
}
}