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:
mouseSensitivitykontroluje czułość wprowadzania danych przez mysz.playerBodyreprezentuje transformację gracza, która obraca się wzdłuż osi Y w celu poziomego ruchu myszy.- Zmienna
xRotationprzechowuje 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.