Вопрос:
Я использую положение мыши для поворота камеры:
void FixedUpdate() { transform.Rotate(-Input.GetAxis(«Mouse Y») * rotationspeed * Time.deltaTime, Input.GetAxis(«Mouse X») * rotationspeed * Time.deltaTime, 0); }
Проблема в том, что после некоторого поворота камера начинает вращаться и по оси Z. Что я должен сделать, чтобы заблокировать вращение оси Z камеры?
Лучший ответ:
Transform.Rotate имеет необязательный параметр
Space relativeTo = Space.Self
поэтому по умолчанию он имеет значение Sapce.Self поэтому он вращается вокруг локальных осей объекта.
Так что происходит, когда вы смотрите вниз, меняя местную ось 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); } Ответ №1
Если вы хотите повернуть объект по двум осям, третья ось будет вращаться по умолчанию, вы не можете заблокировать это, потому что это факт реального мира. Попробуйте это в реальном мире, 3D-объект вращается, любые две оси будут вращаться автоматически. Если вы вращаете одну ось, две другие будут зафиксированы. Благодарю.