Creazione di un controller in prima persona in Unity

Questo tutorial ti guiderà nella creazione di un semplice controller in prima persona in Unity. Il controller in prima persona consente ai giocatori di esplorare un mondo 3D con movimenti fluidi e rotazione della telecamera. Utilizzeremo script C# di base e il componente CharacterController integrato di Unity.

1. Impostazione della scena

Inizia impostando l'ambiente di scena di base per il tuo controller in prima persona:

  1. In Unity, crea una nuova scena 3D.
  2. Vai su GameObject > Oggetto 3D > Piano per creare una superficie del terreno.
  3. Regola la scala dell'aereo per renderlo abbastanza grande da consentire al giocatore di camminarci intorno.
  4. Vai su GameObject > Oggetto 3D > Cubo per aggiungere ostacoli o muri con cui interagire.

2. Aggiunta dell'oggetto Player

Per rappresentare il giocatore, utilizzeremo un oggetto capsula:

  • Vai su GameObject > Oggetto 3D > Capsula per aggiungere una capsula alla scena.
  • Posizionare la capsula leggermente al di sopra del terreno (ad esempio, Posizione = (0, 1, 0)).
  • Rinomina la capsula in Giocatore.
  • Rimuovere il componente Capsule Collider poiché CharacterController gestirà le collisioni.
  • Aggiungere un componente CharacterController all'oggetto Player selezionando Player, quindi facendo clic su Aggiungi componente nell'Inspector e cercando CharacterController.

3. Scrivere lo script del controller in prima persona

Ora creiamo uno script per gestire il movimento del giocatore e la rotazione della telecamera:

  1. Nella finestra Progetto, fai clic con il pulsante destro del mouse e seleziona Crea > Script C#. Assegnagli il nome FirstPersonController.
  2. Collegare lo script all'oggetto Player trascinandolo dalla finestra Progetto al Player nella Gerarchia.

Aprire lo script e sostituire il contenuto con il seguente codice:

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. Collegamento della fotocamera

Per la visuale in prima persona, la telecamera deve essere collegata al giocatore:

  • Selezionare Fotocamera principale nella Gerarchia.
  • Posizionarlo leggermente sopra l'oggetto Player (ad esempio, Y = 1,5).
  • Trascina la Camera sull'oggetto Player nella Hierarchy per renderla un figlio del Player. Questo le farà seguire i movimenti e le rotazioni del player.

5. Configurazione degli input

Input Manager di Unity usa nomi di assi predefiniti come "Horizontal" e "Vertical" per il movimento, così come "Mouse X" e "Mouse Y" per l'input del mouse. Questi sono configurati automaticamente, ma puoi regolare la sensibilità in Edit > Project Settings > Input Manager.

6. Test del controller

Ora che il controller in prima persona è pronto, premi il pulsante play per provarlo:

  • Utilizzare W, A, S, D per spostare il giocatore avanti, indietro e lateralmente.
  • Muovi il mouse per ruotare la telecamera e guardarti intorno.
  • Per verificare che la gravità funzioni, scendi da qualsiasi oggetto sollevato e vedi se il giocatore cade naturalmente.

7. Miglioramento del controller

È possibile migliorare ulteriormente il controller in prima persona aggiungendo:

  • Funzionalità di sprint aumentando la velocità di movimento tenendo premuto il tasto Maiusc.
  • Logica di salto che rileva quando il giocatore preme la barra spaziatrice e applica una velocità verso l'alto.
  • Meccaniche di arrampicata o accovacciamento per interazioni più complesse del giocatore con l'ambiente.

Conclusione

Con questo controller di base in prima persona, ora hai una configurazione di gioco funzionale per esplorare ambienti 3D. Personalizzando ed estendendo lo script, puoi aggiungere più funzionalità e interazioni per soddisfare le esigenze del tuo gioco.