Come codificare un controller di caratteri basato sulla fisica in Unity3D

Come codificare un controller di caratteri basato sulla fisica in Unity3D

Un controller di personaggi può aiutarti a implementare semplici movimenti fisici nel tuo gioco.

Puoi avvicinarti ai controller di personaggi Unity3D da diverse angolazioni. Se usi una libreria con potenti classi e funzioni, la creazione di un controller di personaggi basato sulla fisica può essere un posto divertente per iniziare lo sviluppo del tuo gioco.

Passaggio 1: crea una scena con oggetti del giocatore e del terreno

controller di carattere unità spazio 3d

Una volta che Unity è aperto e hai creato un nuovo progetto, puoi iniziare aggiungendo un paio di oggetti alla tua scena. Puoi creare questi oggetti nell’ordine che preferisci, ma assicurati di utilizzare le impostazioni corrette. Sebbene questo progetto sia di base, è un ottimo modo per iniziare con Unity.

Un oggetto piano 3D per il terreno

Il primo oggetto da aggiungere alla tua scena è un aereo. Fare clic con il pulsante destro del mouse all’interno del riquadro della gerarchia, passare con il mouse su Oggetto 3D e selezionare Piano dall’elenco. Puoi regolare le dimensioni dell’aereo per fornire un’area di prova più ampia, ma non devi fare nient’altro.

Un modello di giocatore oggetto cubo

Successivamente, è il momento di aggiungere un cubo alla scena che funga da modello del giocatore. Fare clic con il pulsante destro del mouse all’interno del riquadro della gerarchia, passare con il mouse su Oggetto 3D e selezionare Cubo dal menu a discesa. Posiziona il nuovo cubo in modo che si trovi sopra il piano che hai anche aggiunto. Devi anche aggiungere un componente corpo rigido per trasformare il cubo in un oggetto fisico.

Seleziona il cubo e vai all’ispettore. Fare clic su Aggiungi componente nella parte inferiore del riquadro, cercare rigidbody e selezionare Rigidbody dall’elenco quando viene visualizzato. Seleziona la casella Usa gravità e lascia il resto delle impostazioni così come sono.

Puoi trovare risorse Unity gratuite online per abbellire il tuo progetto.

Una fotocamera in terza persona

La tua scena dovrebbe già avere una videocamera che puoi usare come videocamera in terza persona. Posiziona la videocamera in modo che si trovi in ​​una comoda posizione in terza persona sopra il tuo cubo. Vai al riquadro della gerarchia prima di trascinare e rilasciare la videocamera sul cubo per creare una relazione genitore-figlio. La fotocamera seguirà automaticamente il tuo cubo una volta fatto.

Un test rapido

Mentre la tua scena non ha ancora alcun codice, puoi testare il lavoro che hai fatto finora. Fai clic sul pulsante Riproduci nella parte superiore dello schermo per caricare il gioco. Dovresti vedere il cubo cadere e atterrare sopra l’aereo, e la telecamera dovrebbe seguire il cubo mentre cade.

Passaggio 2: impostare un file C#

Ora è il momento di creare un file C# in modo da poter iniziare a programmare alcuni movimenti. Vai alla sezione Progetto, fai clic con il pulsante destro del mouse, passa con il mouse su Crea e seleziona Cartella dall’elenco. Assegna un nome alla cartella Script o qualcosa di simile.

Naviga all’interno della nuova cartella e ripeti il ​​processo, ma seleziona Script C# dall’elenco. Puoi dare a questo file qualsiasi nome, ma questo sarà anche il nome della funzione principale al suo interno. Assicurati che il tuo nuovo C# assomigli a questo.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }


    void Update() {
    }
}

Passaggio 3: usa C# per creare movimenti avanti e indietro con velocità

Prima di aggiungere funzioni nel file di script, dichiara alcune variabili pubbliche. Il primo è un Rigidbody per memorizzare il modello del giocatore. Dichiara anche un float per tenere traccia della velocità di movimento. Queste variabili vanno nella classe principale, al di fuori di qualsiasi funzione.

public Rigidbody rigidbody;
public float speed;

Successivamente, è il momento di aggiungere una singola riga di codice alla funzione Start. Questo usa una dichiarazione GetComponent per assegnare il componente rigidbody del cubo alla variabile rigidbody che hai creato.

void Start() {
    rigidbody = GetComponent < Rigidbody > ();
}

Ora puoi aggiungere del codice che farà muovere il tuo modello di giocatore. Questo codice è carino e semplice; hai solo bisogno di due istruzioni if, una per il movimento in avanti e una per il movimento all’indietro. È possibile utilizzare Input.GetKey per determinare quando viene premuto un tasto. In questo caso, stai cercando le pressioni dei tasti W e S.

Premendo uno di questi tasti si aggiunge una forza al cubo rigidbody utilizzando rigidbody.AddForce. È possibile calcolare la direzione e la velocità della forza aggiunta moltiplicando la sua posizione sull’asse Z (transform.forward) per la variabile velocità. Non esiste una classe transform.backward da utilizzare per il movimento all’indietro, ma ciò è possibile moltiplicando transform.forward per -1.

if (Input.GetKey("w")) {
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Salva il file C# e torna a Unity. Trova lo script all’interno del riquadro Progetto e trascinalo sul cubo del modello di carattere all’interno della gerarchia per assegnare lo script a quell’oggetto. Quando selezioni il Cubo dovresti vedere lo script come un componente nel riquadro Ispettore. Fare clic all’interno della casella della variabile corpo rigido e selezionare il corpo rigido del cubo.

Ora puoi utilizzare il pulsante Riproduci per avviare il gioco e testare il tuo codice. Ma aspetta! C’è un problema; il tuo Cubo rotolerà piuttosto che andare dritto in avanti. Torna all’ispettore del cubo, trova il componente Rigidbody e seleziona le caselle per bloccare la rotazione sull’asse X e Z prima di riavviare il gioco. Ora dovrebbe funzionare.

Passaggio 4: utilizzare C# per creare una svolta a sinistra e a destra con la coppia

A differenza del movimento avanti e indietro, girare il tuo modello di giocatore Cube richiede una forza chiamata coppia. Hai bisogno di un’altra variabile per questo: un float pubblico per assegnare un valore di coppia.

public float torque;

Il codice per girare a sinistra ea destra in questo script è molto simile a quello usato anche per andare avanti e indietro. C’è un’istruzione if per ogni direzione che cerca le pressioni del tasto D (svolta a destra) o del tasto A (svolta a sinistra).

Il primo passaggio in ciascuna istruzione if consiste nel determinare la direzione della svolta utilizzando il metodo Input.GetAxis e assegnare il risultato a una variabile float. Successivamente, utilizzare rigidbody.AddTorque per applicare la forza di rotazione al modello di carattere del cubo moltiplicando la coppia, la rotazione e l’asse Z del cubo.

if (Input.GetKey("d")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Salva il tuo codice e torna a Unity per provarlo. Puoi regolare la velocità e il tempo di accelerazione della rotazione del modello del tuo giocatore selezionando il Cubo e modificando le variabili di massa, trascinamento e coppia del corpo rigido nel tuo script. Questo progetto di esempio si basa su 1 massa, 1 resistenza e 2 coppia.

Passaggio 5: utilizzare C# per programmare il salto

Come elemento finale di questo controller di personaggi Unity, è il momento di creare il tuo salto. La creazione di un salto è più complessa rispetto agli altri controlli di base su cui hai lavorato, dato che un salto deve avere un’altezza limitata. Inizia aggiungendo una variabile booleana privata per tenere traccia se il giocatore sta saltando o meno.

private bool isJumping = false;

Questa variabile non farà nulla senza un’istruzione per testarla. In questo caso, un’istruzione if di base per verificare se la variabile è falsa farà il trucco. Aggiungendo la stessa condizione all’altro movimento se le istruzioni impediranno al giocatore di muoversi durante i salti.

if (!isJumping) {
}

Aggiungendo la stessa condizione all’altro movimento se le istruzioni impediranno al giocatore di muoversi durante i salti.

if (Input.GetKey("w") &&! isJumping) {
    rigidbody.AddForce(transform.forward * speed);
}

All’interno del! isJumping if, è necessaria un’altra istruzione if, questa volta per verificare la pressione di un tasto del pulsante di salto. Impostare la variabile isJumping su true è la prima cosa da fare in questa istruzione if, seguita da una dichiarazione rigidbody.angularVelocity per rimuovere le forze attualmente applicate al cubo.

Ora puoi usare la dichiarazione rigidbody.AddForce per aggiungere forza al cubo sul suo asse Z, creando il movimento verso l’alto di un salto. Infine, è il momento di utilizzare una dichiarazione di invoke per chiamare una funzione diversa dopo 0,8 secondi.

if (!isJumping) {
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Questa funzione reimposta la variabile isJumping su false in modo che il movimento/salto sia nuovamente possibile e il ritardo di 0,8 secondi impedisce che si attivi troppo presto.

void Move_Setter() {
    isJumping = false;
}

Passaggio 6: verifica il codice del controller del personaggio

Salva il tuo file e torna in Unity per testare il codice che hai scritto. Come la maggior parte dei compilatori, Unity fornisce informazioni su errori e altri problemi con il codice per semplificare la visualizzazione di ciò che potrebbe essere necessario modificare. Puoi visualizzare il codice completo per questo progetto sulla nostra pagina GitHub.

Creazione di controller di caratteri di unità

Puoi scegliere tra una varietà di approcci diversi durante la creazione di un controller di personaggi in Unity. L’uso della fisica è un’opzione, ma puoi anche utilizzare il sistema di controllo dei personaggi integrato, se lo desideri.

Esplorare diverse opzioni come questa è un ottimo modo per conoscere strumenti come Unity.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *