Как я могу исправить мою мышь, не вращая камеру на оси X? - PullRequest
1 голос
/ 21 февраля 2020

Итак, моя проблема с моей управляемой камерой от первого лица, которая в настоящее время является просто камерой с коллайдером, Контроллером персонажей и этим скриптом на нем. Когда я вхожу в игру, значения MouseX меняются в инсекторе, но сама камера кажется заблокированной, я могу только перемещать ее вверх и вниз. Это лишь небольшой объем основного кода, но я думаю, что он содержит достаточно, чтобы показать проблему.

[SerializeField]
private Camera m_Camera;
[SerializeField]
private CharacterController m_CharacterController;

[SerializeField]
private float m_MouseX;
[SerializeField]
private float m_MouseY;

 void Update()
{
    Rotate();
    Movement();
}

private void Rotate()
{
    // Receive mouse input and modifies
    m_MouseX += Input.GetAxis("Mouse X") * m_LookSensitivity;
    m_MouseY += Input.GetAxis("Mouse Y") * m_LookSensitivity;

    // Keep mouseY between -90 and +90
    m_MouseY = Mathf.Clamp(m_MouseY, -90.0f, 90.0f);

    // Rotate the player object around the y-axis
    transform.localRotation = Quaternion.Euler(Vector3.up * m_MouseX);
    // Rotate the camera around the x-axis
    m_Camera.transform.localRotation = Quaternion.Euler(Vector3.left * m_MouseY);
}

1 Ответ

2 голосов
/ 21 февраля 2020

Вы будете работать лучше, если вы будете поворачивать, используя метод transform.Rotate () вместо изменения кватерниона, например:

private void Rotate()
{
    // Receive mouse input and modifies
    m_MouseX += Input.GetAxis("Mouse X") * m_LookSensitivity;
    m_MouseY += Input.GetAxis("Mouse Y") * m_LookSensitivity;

    // Rotate the player object around the y-axis
    transform.Rotate(Vector3.up * m_MouseX);

    // Rotate the camera around the x-axis
    m_Camera.transform.Rotate(Vector3.left * m_MouseY);
}

И если вы хотите ограничить максимальный угол вашей камеры на (-90, 90) вы можете накапливать m_MouseY в другой переменной и поворачивать в каждую сторону (+/-) только тогда, когда эта переменная находится внутри правильного инвертирования, например:

totalY += m_MouseY;
if (totalY < 90 && m_MouseY > 0)
   m_Camera.transform.Rotate(Vector3.left * m_MouseY);
if (totalY > -90 && m_MouseY < 0)
   m_Camera.transform.Rotate(Vector3.left * m_MouseY);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...