Tworzenie kontrolera pierwszoosobowego w Unity
Ten samouczek przeprowadzi Cię przez proces tworzenia prostego kontrolera pierwszoosobowego w Unity. Kontroler pierwszoosobowy pozwala graczom eksplorować świat 3D z płynnym ruchem i obrotem kamery. Użyjemy podstawowego skryptu C# i wbudowanego komponentu CharacterController Unity.
1. Przygotowanie sceny
Zacznij od skonfigurowania podstawowego środowiska sceny dla kontrolera pierwszoosobowego:
- W Unity utwórz nową scenę 3D.
- Przejdź do GameObject > 3D Object > Plane, aby utworzyć powierzchnię ziemi.
- Dostosuj skalę samolotu, aby był na tyle duży, aby gracz mógł po nim chodzić.
- Przejdź do Obiekt Gry > Obiekt 3D > Sześcian, aby dodać przeszkody lub ściany, z którymi można wchodzić w interakcję.
2. Dodawanie obiektu gracza
Aby przedstawić gracza, użyjemy obiektu kapsułowego:
- Aby dodać kapsułę do sceny, przejdź do GameObject > 3D Object > Capsule.
- Umieść kapsułkę lekko nad ziemią (np. Pozycja = (0, 1, 0)).
- Zmień nazwę kapsuły na Player.
- Usuń komponent Capsule Collider, ponieważ kontroler CharacterController będzie obsługiwał kolizje.
- Dodaj komponent CharacterController do obiektu Player, wybierając Player, a następnie klikając Dodaj komponent w Inspektorze i wyszukując CharacterController.
3. Pisanie skryptu kontrolera pierwszoosobowego
Teraz utwórzmy skrypt, który będzie obsługiwał ruch gracza i obrót kamery:
- W oknie Projekt kliknij prawym przyciskiem myszy i wybierz Utwórz > Skrypt C#. Nadaj mu nazwę KontrolerPierwszejOsoby.
- Dołącz skrypt do obiektu Odtwarzacz, przeciągając go z okna Projektu do Odtwarzacza w hierarchii.
Otwórz skrypt i zamień jego zawartość na następujący kod:
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
public float moveSpeed = 5f;
public float mouseSensitivity = 2f;
public float gravity = -9.81f;
private CharacterController controller;
private Vector3 velocity;
private Transform cameraTransform;
void Start()
{
controller = GetComponent();
cameraTransform = Camera.main.transform;
cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
cameraTransform.parent = transform; // Attach camera to player
}
void Update()
{
// Player movement
float moveX = Input.GetAxis("Horizontal") * moveSpeed;
float moveZ = Input.GetAxis("Vertical") * moveSpeed;
Vector3 move = transform.right * moveX + transform.forward * moveZ;
controller.Move(move * Time.deltaTime);
// Apply gravity
if (controller.isGrounded && velocity.y < 0)
{
velocity.y = -2f;
}
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
// Camera rotation
float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
transform.Rotate(Vector3.up * mouseX);
cameraTransform.Rotate(Vector3.left * mouseY);
}
}
4. Podłączanie kamery
Aby uzyskać widok z pierwszej osoby, kamera musi być przymocowana do gracza:
- Wybierz Główną kamerę w hierarchii.
- Umieść go nieznacznie nad obiektem Gracza (np. Y = 1,5).
- Przeciągnij kamerę na obiekt Player w Hierarchii, aby uczynić go dzieckiem Player. Spowoduje to, że będzie on podążał za ruchami i obrotami gracza.
5. Konfigurowanie wejść
Unity Input Manager używa predefiniowanych nazw osi, takich jak „Horizontal” i „Vertical” do ruchu, a także „Mouse X” i „Mouse Y” do wprowadzania danych myszą. Są one automatycznie konfigurowane, ale możesz dostosować czułość w Edit > Project Settings > Input Manager.
6. Testowanie kontrolera
Teraz, gdy kontroler pierwszoosobowy jest gotowy, naciśnij przycisk odtwarzania, aby go przetestować:
- Użyj W, A, S, D, aby poruszać graczem do przodu, do tyłu i na boki.
- Poruszaj myszką, aby obracać kamerę i rozglądać się dookoła.
- Sprawdź, czy grawitacja działa, schodząc z podniesionych obiektów i sprawdzając, czy gracz spadnie naturalnie.
7. Ulepszanie kontrolera
Możesz jeszcze bardziej udoskonalić sterowanie pierwszoosobowe, dodając:
- Funkcjonalność sprintu poprzez zwiększenie prędkości ruchu przy wciśniętym klawiszu Shift.
- Logika skoków polegająca na wykrywaniu, kiedy gracz naciska spację i zastosowaniu prędkości skierowanej w górę.
- Mechanika wspinania się i kucania umożliwiająca graczowi bardziej złożone interakcje z otoczeniem.
Wniosek
Dzięki temu podstawowemu kontrolerowi pierwszoosobowemu masz teraz funkcjonalny zestaw gracza do eksploracji środowisk 3D. Dostosowując i rozszerzając skrypt, możesz dodać więcej funkcji i interakcji, aby dopasować je do potrzeb swojej gry.