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.