Unity - Script di movimento di base

In questa lezione, scriveremo il codice che fa muovere un gameObject su, giù, sinistra e destra in base all'input dell'utente. Questo dovrebbe aiutarci a comprendere più facilmente il flusso di lavoro dello scripting di Unity.

Ricorda che ogni GameObject ha almeno un componente: Transform. La particolarità è che la trasformazione di un gameObject si presenta anche come variabili nel lato script di Unity, quindi possiamo modificarlo tramite codice. Anche questo non è limitato alla trasformazione; tutti i componenti in Unity hanno proprietà accessibili tramite variabili nello script.

Cominciamo con il nostro copione di movimento. Crea un nuovo script e chiamalo "Movimento".

Ora apri lo script e dovresti vedere le stesse cose che hai visto nell'ultima lezione.

Creiamo una variabile float pubblica denominata speed. Fare una variabilepublic in Unity ha un grande vantaggio:

  • La variabile si presenta come un campo modificabile all'interno dell'editor, quindi non è necessario regolare manualmente i valori nel codice.

public class Movement : MonoBehaviour {
   public float speed;
}

Se salviamo questo script senza toccare gli altri metodi, dovrebbe essere compilato in Unity.

(Puoi vedere quando sta compilando

dall'icona nell'angolo in basso a destra.)

Il prossimo, drag and droplo script dagli Assets al GameObject. Se lo fai correttamente, questo è quello che dovresti vedere nelle proprietà del GameObject -

Poiché il valore della velocità è regolabile e non deve essere cambiato nel codice tutto il tempo, possiamo usare il metodo update () invece di start ().

Consideriamo ora gli obiettivi per il metodo Update:

  • Verificare l'input dell'utente.

  • Se è presente un input dell'utente, leggere le istruzioni di input.

  • Modificare i valori di posizione della trasformazione dell'oggetto in base alla sua velocità e direzione. Per fare ciò, aggiungeremo il seguente codice:

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

Parliamo ora del codice in breif.

Prima di tutto, creiamo una variabile in virgola mobile denominata h (per orizzontale), e il suo valore è dato da Input.GetAxisRawmetodo. Questo metodo restituisce -1, 0 o 1 a seconda del tasto premuto dal giocatore sulle frecce su / giù / sinistra / destra.

La classe Input è responsabile di ricevere l'input dall'utente sotto forma di pressioni di tasti, input del mouse, input del controller e così via. Il metodo GetAxisRaw è leggermente più difficile da capire, quindi torneremo su questo più tardi.

Avanti, siamo updating la posizione del nostro gameObject in una nuova posizione definita creando un nuovo Vector2. Vector2 accetta 2 parametri, che sono i suoix and yvalori rispettivamente. Per il valore x, forniamo la somma degli oggetticurrent posizione e la sua speed, aggiungendo effettivamente una certa quantità ad ogni fotogramma premuto il tasto nella sua posizione.

Salva questo script e torna a Unity. Unity aggiornerà automaticamente tutti gli script una volta compilato correttamente, quindi non è necessario ricollegare lo script ancora e ancora.

Ora che hai finito, modifica il valore di speednelle proprietà del GameObject per dire 0.8. Questo è importante perché un valore più alto farà muovere il giocatore troppo velocemente.

Ora fai clic su Play e guarda il tuo primo piccolo gioco in azione!

Prova a premere i tasti freccia e a muoverti. Per interrompere il gioco, premi nuovamente Riproduci. Puoi persino regolare la velocità in tempo reale in modo da non doverlo fermare e avviare tutto il tempo.

Nella prossima lezione impareremo a conoscere i corpi rigidi e le collisioni.