Як створити плавний рух миші в 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, ви можете значно покращити досвід гравця, запропонувавши точне та плавне керування камерою. Цей підручник допоможе вам налаштувати базову систему руху миші та вдосконалити її за допомогою методів згладжування.