Jak stworzyć płynny ruch myszy w Unity

Płynny ruch myszy to istotny aspekt tworzenia gier, który pomaga poprawić ogólne wrażenia użytkownika. Wdrażając płynny ruch myszy, możesz sprawić, że sterowanie kamerą lub graczem w grze będzie bardziej płynne i responsywne, co przełoży się na dopracowane i wciągające wrażenia z rozgrywki. W tym samouczku pokażemy, jak skonfigurować płynny ruch myszy w Unity, z instrukcjami krok po kroku i przykładami kodu w języku C#. Omówimy również możliwe powody, dla których warto zaimplementować tę funkcję w swoich grach.

Dlaczego warto wdrożyć płynny ruch myszy?

Oto kilka powodów, dla których płynny ruch myszy jest ważny w grach:

  • Lepsze wrażenia użytkownika: Płynne sterowanie daje graczowi poczucie większej kontroli nad swoimi działaniami, co jest niezbędne do immersji, zwłaszcza w grach z widokiem z pierwszej lub trzeciej osoby.
  • Większa precyzja: Dokładne dostrojenie ruchu myszy pozwala na bardziej precyzyjne sterowanie kamerą, co jest szczególnie ważne w grach typu strzelanka lub innych grach wymagających dokładnego celowania.
  • Dopracowany wygląd i styl: Dzięki temu gra wydaje się bardziej profesjonalna i dopracowana, co jest niezbędne, aby zatrzymać graczy i utrzymać ich zaangażowanie.
  • Zmniejsza chorobę lokomocyjną: Nerwowy lub nadmiernie wrażliwy ruch kamery może powodować dyskomfort lub chorobę lokomocyjną u graczy. Płynny ruch myszy może pomóc zmniejszyć to ryzyko.

Konfigurowanie płynnego ruchu myszy w Unity

Przeanalizujmy kroki umożliwiające uzyskanie płynnego ruchu myszy w Unity.

Krok 1: Utwórz nowy skrypt

Najpierw utwórz nowy skrypt C#, który będzie kontrolował ruch myszy. Możesz nazwać ten skrypt w następujący sposób: 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);
    }
}

W tym kodzie:

  • mouseSensitivity kontroluje czułość wprowadzania danych przez mysz.
  • playerBody reprezentuje transformację gracza, która obraca się wzdłuż osi Y w celu poziomego ruchu myszy.
  • Zmienna xRotation przechowuje aktualny obrót w pionie (w górę i w dół) i jest ograniczona do zakresu od -90 do 90 stopni, aby zapobiec nadmiernemu obrotowi.
  • Zablokowaliśmy kursor myszy na środku ekranu, aby zapobiec jego przesunięciu się poza okno gry.

Krok 2: Dołącz skrypt do kamery

Teraz, gdy skrypt jest już gotowy, przejdź do sceny Unity i dołącz skrypt MouseLook do swojej kamery (np. obiekt Main Camera).

Następnie przypisz pole playerBody, przeciągając obiekt gracza (zwykle kontroler postaci lub pusty obiekt gry reprezentujący gracza) do pola Player Body skryptu w Inspektorze.

Krok 3: Dostosuj czułość myszy

Możesz eksperymentować z wartością mouseSensitivity, aby osiągnąć pożądany poziom kontroli. Dobrym punktem wyjścia jest 100, ale możesz dostosować ją wyżej lub niżej w zależności od pożądanego poziomu precyzji.

Krok 4: Obsługa płynności wprowadzania danych

Aby uzyskać jeszcze płynniejszy ruch, możesz zastosować interpolację do wartości wejściowych myszy. Dzięki temu kamera będzie płynnie przechodzić między klatkami, zamiast przeskakiwać z jednej pozycji do drugiej. Oto przykład, jak to zaimplementować:

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);
    }
}

Ta zaktualizowana wersja wprowadza wygładzanie za pomocą Vector2.SmoothDamp. Zmienna smoothTime kontroluje, jak płynne powinno być przejście. Niższe wartości sprawiają, że ruch jest bardziej responsywny, podczas gdy wyższe wartości sprawiają, że jest wolniejszy i bardziej stopniowy.

Krok 5: Testowanie i dostrajanie

Gdy już masz skrypt, przetestuj grę i dostosuj wartości czułości i wygładzania w zależności od tego, jak płynny ma być ruch myszy. Możesz również dostosować kąt zaciskania, aby zapewnić większą lub mniejszą swobodę ruchu kamery.

Wniosek

Wprowadzając płynny ruch myszy w swoim projekcie Unity, możesz znacznie poprawić wrażenia gracza, oferując precyzyjną i płynną kontrolę kamery. Ten samouczek przeprowadził Cię przez konfigurację podstawowego systemu ruchu myszy i ulepszył go za pomocą technik wygładzania.