cocaine4ik
@cocaine4ik

Почему камера некорректно следует за мышью по оси Y?

Написан код по которому камера (от первого лица) должна следовать за указателем мыши. По оси Х (горизонтали) все работает как надо. При попытках следовать по оси Y (вертикали) камера просто переворачивается на 90 градусов. Пример на скриншотах.

Код:
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;
    }
}

Скриншоты. Стрелками указаны направления куда я веду указатель мыши.
5bc78bf17520a690833561.png5bc78b9ee43f0794841698.png5bc78baa5f8d5541987714.png5bc78bc388105838345377.png5bc78bcd1430b892011898.png
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
Griboks
@Griboks Куратор тега Unity
Вокруг не той оси вращаете камеру.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы