Opprette en førstepersonskontroller i Unity

Denne opplæringen vil guide deg gjennom å bygge en enkel førstepersonskontroller i Unity. Førstepersonskontrolleren lar spillere utforske en 3D-verden med jevn bevegelse og kamerarotasjon. Vi vil bruke grunnleggende C#-skripting og Unitys innebygde CharacterController-komponent.

1. Sette opp scenen

Start med å sette opp det grunnleggende scenemiljøet for din førstepersonskontroller:

  1. I Unity oppretter du en ny 3D-scene.
  2. Gå til GameObject > 3D Object > Plane for å lage en bakkeoverflate.
  3. Juster skalaen til flyet for å gjøre det stort nok til at spilleren kan gå rundt.
  4. Gå til GameObject > 3D Object > Cube for å legge til hindringer eller vegger å samhandle med.

2. Legger til spillerobjektet

For å representere spilleren bruker vi et kapselobjekt:

  • Gå til GameObject > 3D Object > Capsule for å legge til en kapsel til scenen.
  • Plasser kapselen litt over bakken (f.eks. Posisjon = (0, 1, 0)).
  • Gi kapselen nytt navn til Player.
  • Fjern Capsule Collider-komponenten siden CharacterController vil håndtere kollisjoner.
  • Legg til en CharacterController-komponent til Player-objektet ved å velge Player, og deretter klikke Add Component i Inspector og søke etter CharacterController.

3. Skrive First-Person Controller-skriptet

La oss nå lage et skript for å håndtere spillerbevegelsen og kamerarotasjonen:

  1. I prosjektvinduet høyreklikker du og velger Create > C# Script. Gi det navnet FirstPersonController.
  2. Fest skriptet til spillerobjektet ved å dra det fra prosjektvinduet til spilleren i hierarkiet.

Åpne skriptet og erstatt innholdet med følgende kode:

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. Feste kameraet

For førstepersonsvisning må kameraet festes til spilleren:

  • Velg Hovedkamera i hierarkiet.
  • Plasser den litt over spillerobjektet (f.eks. Y = 1,5).
  • Dra kameraet til spillerobjektet i hierarkiet for å gjøre det til et barn av spilleren. Dette vil få den til å følge spillerens bevegelser og rotasjoner.

5. Konfigurering av innganger

Unitys Input Manager bruker forhåndsdefinerte aksenavn som "Horisontal" og "Vertical" for bevegelse, samt "Mouse X" og "Mouse Y" for museinndata. Disse konfigureres automatisk, men du kan justere følsomheten i Rediger > Prosjektinnstillinger > Input Manager.

6. Testing av kontrolleren

Nå som førstepersonskontrolleren er klar, trykk på avspillingsknappen for å teste den:

  • Bruk W, A, S, D for å flytte spilleren fremover, bakover og sidelengs.
  • Beveg musen for å rotere kameraet og se deg rundt.
  • Sørg for at tyngdekraften fungerer ved å tråkke av eventuelle løftede gjenstander for å se om spilleren faller naturlig.

7. Forbedring av kontrolleren

Du kan forbedre førstepersonskontrolleren ytterligere ved å legge til:

  • Sprintfunksjonalitet ved å øke moveSpeed ​​når du holder nede shift-tasten.
  • Hoppelogikk ved å oppdage når spilleren trykker på mellomromstasten og bruke en oppadgående hastighet.
  • Klatre- eller hukemekanikk for mer komplekse spillerinteraksjoner med omgivelsene.

Konklusjon

Med denne grunnleggende førstepersonskontrolleren har du nå et funksjonelt spilleroppsett for å utforske 3D-miljøer. Ved å tilpasse og utvide skriptet kan du legge til flere funksjoner og interaksjoner for å passe spillets behov.