Skapa en förstapersonskontroller i Unity

Denna handledning guidar dig genom att bygga en enkel förstapersonskontroll i Unity. Förstapersonskontrollen låter spelare utforska en 3D-värld med mjuka rörelser och kamerarotation. Vi kommer att använda grundläggande C#-skript och Unitys inbyggda CharacterController-komponent.

1. Ställa in scenen

Börja med att ställa in den grundläggande scenmiljön för din förstapersonskontroller:

  1. I Unity skapar du en ny 3D-scen.
  2. Gå till GameObject > 3D Object > Plane för att skapa en markyta.
  3. Justera planets skala så att det blir tillräckligt stort för att spelaren ska kunna gå runt.
  4. Gå till GameObject > 3D Object > Cube för att lägga till hinder eller väggar att interagera med.

2. Lägger till spelarobjektet

För att representera spelaren kommer vi att använda ett kapselobjekt:

  • Gå till GameObject > 3D-objekt > Kapsel för att lägga till en kapsel till scenen.
  • Placera kapseln något ovanför marken (t.ex. Position = (0, 1, 0)).
  • Byt namn på kapseln till Player.
  • Ta bort Capsule Collider-komponenten eftersom CharacterController kommer att hantera kollisioner.
  • Lägg till en CharacterController-komponent till Player-objektet genom att välja Player, klicka sedan på Add Component i Inspector och söka efter CharacterController.

3. Att skriva First-Person Controller-skriptet

Låt oss nu skapa ett skript för att hantera spelarens rörelser och kamerarotation:

  1. I projektfönstret högerklickar du och väljer Skapa > C#-skript. Döp det till FirstPersonController.
  2. Bifoga skriptet till spelarobjektet genom att dra det från projektfönstret till spelaren i hierarkin.

Öppna skriptet och ersätt innehållet med följande 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. Fästa kameran

För förstapersonsvyn måste kameran vara ansluten till spelaren:

  • Välj Huvudkamera i hierarkin.
  • Placera den något ovanför spelarobjektet (t.ex. Y = 1,5).
  • Dra kameran till spelarobjektet i hierarkin för att göra det till ett underordnat av spelaren. Detta gör att den följer spelarens rörelser och rotationer.

5. Konfigurera ingångar

Unitys Input Manager använder fördefinierade axelnamn som "Horisontell" och "Vertikal" för rörelse, samt "Mouse X" och "Mouse Y" för musingång. Dessa konfigureras automatiskt, men du kan justera känsligheten i Redigera > Projektinställningar > Inputhanterare.

6. Testa styrenheten

Nu när förstapersonskontrollen är klar, tryck på play-knappen för att testa den:

  • Använd W, A, S, D för att flytta spelaren framåt, bakåt och åt sidan.
  • Flytta musen för att rotera kameran och se dig omkring.
  • Se till att gravitationen fungerar genom att kliva av alla upphöjda föremål för att se om spelaren faller naturligt.

7. Förbättra styrenheten

Du kan förbättra förstapersonskontrollen ytterligare genom att lägga till:

  • Sprintfunktionalitet genom att öka rörelsehastigheten när du håller ned shift-tangenten.
  • Hopplogik genom att upptäcka när spelaren trycker på mellanslagstangenten och applicera en uppåtgående hastighet.
  • Klättrings- eller hukmekanik för mer komplexa spelarinteraktioner med omgivningen.

Slutsats

Med denna grundläggande förstapersonskontroller har du nu en funktionell spelarinställning för att utforska 3D-miljöer. Genom att anpassa och utöka skriptet kan du lägga till fler funktioner och interaktioner för att passa ditt spels behov.