Вы будете работать лучше, если вы будете поворачивать, используя метод 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);