Я хочу сделать камеру от первого лица, которая вращается с помощью мыши.
Я посмотрел на страницу API сценариев Input.GetAxis и нашел пример кода, который я включил в конец своего поста. Попробовав это, я понял, что, хотя он и обладает теми же базовыми функциями, на которые я надеялся, он не удерживает камеру параллельно плоскости xz, особенно при перемещении мыши по кругу. Через некоторое время камера окажется под нечетным углом, и игрок будет полностью сбит с толку!
Существует ли быстрое исправление этого кода, которое каким-то образом ограничит движение камеры, или есть лучший способ повернуть камеру?
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float horizontalSpeed = 2.0F;
public float verticalSpeed = 2.0F;
void Update() {
float h = horizontalSpeed * Input.GetAxis("Mouse X");
float v = verticalSpeed * Input.GetAxis("Mouse Y");
transform.Rotate(v, h, 0);
}
}
Ответы:
Проблема в том, что вы обновляете существующее вращение, а не отслеживаете его и заменяете каждое обновление.
Когда вы обновляете вращение, оно объединяет ваше новое вращение со старым, что приводит к неожиданному поведению.
Решение состоит в том, чтобы отслеживать накопленное вращение и полностью сбрасывать вращение при каждом обновлении с новыми значениями.
Отдайте должное, я нашел ответ здесь: Ответы Unity: как заблокировать или установить камеры, вращение до нуля
Рабочий код:
Ключевые отличия:
источник
Что делать, если вы сделаете камеру дочерним элементом пустого игрового объекта. Затем с помощью одного сценария вы управляете вращением пустого игрового объекта относительно вектора UP. (MouseX) С помощью другого сценария, прикрепленного к игровому объекту камеры, вы управляете вращением относительно правого вектора (MouseY).
источник