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:

  1. W Unity utwórz nową scenę 3D.
  2. Przejdź do GameObject > 3D Object > Plane, aby utworzyć powierzchnię ziemi.
  3. Dostosuj skalę samolotu, aby był na tyle duży, aby gracz mógł po nim chodzić.
  4. 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:

  1. W oknie Projekt kliknij prawym przyciskiem myszy i wybierz Utwórz > Skrypt C#. Nadaj mu nazwę KontrolerPierwszejOsoby.
  2. 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.