Как создать плавное движение мыши в Unity

Плавное движение мыши — это важный аспект разработки игр, который помогает улучшить общее взаимодействие с пользователем. Реализовав плавное движение мыши, вы можете сделать управление камерой или игроком в вашей игре более плавным и отзывчивым, что приведет к отточенному и захватывающему игровому процессу. В этом руководстве мы рассмотрим, как настроить плавное движение мыши в Unity, с пошаговыми инструкциями и примерами кода на C#. Мы также обсудим возможные причины, по которым вы захотите реализовать эту функцию в своих играх.

Зачем реализовывать плавное движение мыши?

Вот несколько причин, почему плавное движение мыши важно в играх:

  • Улучшенный пользовательский опыт: Плавное управление помогает игроку лучше контролировать свои действия, что крайне важно для погружения, особенно в играх от первого или третьего лица.
  • Повышенная точность: Тонкая настройка движения мыши позволяет точнее управлять камерой, что имеет решающее значение в шутерах или любых играх, требующих тщательного прицеливания.
  • Отточенный внешний вид и ощущения: Это делает игру более профессиональной и отточенной, что имеет важное значение для удержания игроков и поддержания их вовлеченности.
  • Уменьшает укачивание: Нервное или чрезмерно чувствительное движение камеры может вызвать дискомфорт или укачивание у игроков. Плавное движение мыши может помочь снизить этот риск.

Настройка плавного движения мыши в Unity

Давайте рассмотрим шаги по созданию плавного движения мыши в Unity.

Шаг 1: Создайте новый сценарий

Сначала создайте новый скрипт C#, который будет управлять движением мыши. Вы можете назвать этот скрипт как-то вроде MouseLook.

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;

    void Start()
    {
        // Lock the cursor in the middle of the screen
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get mouse movement input
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        // Invert the Y-axis for a more natural control feel
        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        // Rotate the camera around the X-axis (up and down)
        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);

        // Rotate the player object around the Y-axis (left and right)
        playerBody.Rotate(Vector3.up * mouseX);
    }
}

В этом коде:

  • mouseSensitivity управляет чувствительностью ввода мыши.
  • playerBody представляет собой преобразование игрока, которое вращается вдоль оси Y для горизонтального перемещения мыши.
  • Переменная xRotation хранит текущее вертикальное вращение (вверх и вниз) и ограничивается значением от -90 до 90 градусов, чтобы предотвратить чрезмерное вращение.
  • Мы фиксируем курсор мыши в центре экрана, чтобы избежать его выхода за пределы игрового окна.

Шаг 2: Прикрепите сценарий к камере

Теперь, когда скрипт готов, перейдите к сцене Unity и прикрепите скрипт MouseLook к вашей камере (например, объекту Main Camera).

Затем назначьте поле playerBody, перетащив объект игрока (обычно контроллер персонажа или пустой игровой объект, представляющий игрока) в поле скрипта Player Body в Инспекторе.

Шаг 3: Настройте чувствительность мыши

Вы можете поэкспериментировать со значением mouseSensitivity, чтобы достичь желаемого уровня контроля. Хорошей отправной точкой будет 100, но вы можете настроить его выше или ниже в зависимости от желаемого уровня точности.

Шаг 4: Обработка плавности входных данных

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

using UnityEngine;

public class MouseLook : MonoBehaviour
{
    public float mouseSensitivity = 100f;
    public Transform playerBody;

    private float xRotation = 0f;
    private Vector2 smoothInputVelocity;
    public float smoothTime = 0.1f;
    private Vector2 currentMouseDelta;

    void Start()
    {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update()
    {
        // Get raw mouse input
        Vector2 targetMouseDelta = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")) * mouseSensitivity;

        // Smooth the mouse input
        currentMouseDelta = Vector2.SmoothDamp(currentMouseDelta, targetMouseDelta, ref smoothInputVelocity, smoothTime);

        xRotation -= currentMouseDelta.y * Time.deltaTime;
        xRotation = Mathf.Clamp(xRotation, -90f, 90f);

        transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);
        playerBody.Rotate(Vector3.up * currentMouseDelta.x * Time.deltaTime);
    }
}

В этой обновленной версии представлено сглаживание с использованием Vector2.SmoothDamp. Переменная smoothTime управляет тем, насколько плавным должен быть переход. Более низкие значения делают движение более отзывчивым, а более высокие значения делают его более медленным и постепенным.

Шаг 5: Тестирование и тонкая настройка

После того, как вы разместили скрипт, протестируйте игру и настройте значения чувствительности и сглаживания в зависимости от того, насколько плавным вы хотите сделать движение мыши. Вы также можете настроить угол зажима, чтобы обеспечить большую или меньшую свободу движения камеры.

Заключение

Реализовав плавное движение мыши в вашем проекте Unity, вы можете значительно улучшить игровой опыт, предложив точное и плавное управление камерой. В этом руководстве вы настроили базовую систему движения мыши и улучшили ее с помощью методов сглаживания.