Transform.Rotate имеет необязательный параметр
Space relativeTo = Space.Self
, поэтому по умолчанию он установлен на Sapce.Self
, поэтому он вращается вокруг локальных осейobject.
Итак, когда вы смотрите вниз, меняя местную ось X, ваша локальная ось Y больше не направлена прямо вверх, а скорее направлена немного вперед.Поэтому, если вы теперь вращаетесь вокруг этой локальной оси Y, ваш локальный горизонт неожиданно больше не выровнен с мировым горизонтом.
Что вы хотите сделать вместо этого (вы можете увидеть это также в примере вссылка выше) вращается вокруг оси Y в мировом пространстве , но вращается вокруг оси X в локальном пространстве
вот так
[SerializeField] private float rotationspeed;
private void FixedUpdate()
{
// rotate around global world Y
transform.Rotate(Input.GetAxis("Mouse X") * rotationspeed * Time.deltaTime, 0, 0, Space.World);
// rotate around local X
transform.Rotate(0, -Input.GetAxis("Mouse Y") * rotationspeed * Time.deltaTime, 0);
}