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.