Le Coroutines sono funzioni che possono essere eseguite contemporaneamente al ciclo di esecuzione principale del gioco...



Trascrizione del video

Salve a tutti!

Questo è un videotutorial introduttivo sull'utilizzo delle Coroutines in Unity.

In questo tutorial, userò un esempio pratico per spiegare il concetto e introdurre la funzione WaitForSeconds, che permette di aspettare l'esecuzione di un'operazione per un numero specificato di secondi.

Per seguire questo tutorial è necessaria una conoscenza di base della programmazione in C# su Unity.

Il tutorial è stato registrato utilizzando la versione 2022 di Unity, ma le Coroutine sono disponibili in molti linguaggi di programmazione e nelle versioni precedenti di Unity.

In questo tutorial, utilizzerò uno dei miei asset, ovvero il modello 3D di un cannone navale, comunque non è necessario avere questo modello in particolare per seguire il tutorial e comprendere i concetti; lo sto utilizzando solo come esempio!

Il nostro obiettivo è fare in modo che il cannone spari automaticamente il Prefab di una palla di cannone Prefab ogni 3 secondi fino a quando un evento esterno non interrompe questa routine.

In questo caso, l'evento esterno sarà l'utente che preme il tasto S ("Stop").

Per iniziare, dobbiamo creare uno script per il cannone e chiamarlo "autoshoot".

All'interno della classe principale, definisco tre variabili per specificare il punto di partenza della palla rispetto al cannone:

public GameObject spawnPrefab

Collegherò il prefab della palla di cannone nell'Editor di Unity a questa variabile pubblica.

Vector3 spawnPosition

Quaternion spawnRotation

Ho calcolato questo punto e l'orientamento iniziale, quindi inizializzo questi due valori all'interno della funzione Start:

spawnPosition = transform.position + new Vector3(-1.2f, 1.8f, 0f)

spawnRotation = Quaternion.Euler(-10f, -90f, 0f)

È chiaro che dobbiamo implementare un ciclo che si ripete indefinitamente (a meno che un evento esterno non lo interrompa) e che includa un'istruzione di ritardo di 3 secondi prima di passare alla successiva iterazione.

L'istruzione WaitForSeconds ci permette di fare una pausa per un tempo specificato, che nel nostro caso è di 3 secondi.

Ora, dobbiamo creare un blocco WHILE per eseguire il ciclo principale (che sto attualmente scrivendo in uno spazio vuoto nello script).

while(true) {

GameObject cannonBall = Instantiate(spawnPrefab, spawnPosition, spawnRotation, null);

yield return new WaitForSeconds(3);

}

Il prefab della palla di cannone viene fornito con uno script che, all'avvio, fornisce una spinta iniziale in avanti alla palla e imposta l'oggetto per autodistruggersi dopo 3 secondi, in modo da non riempire né l'universo virtuale né la memoria di sistema con palle di cannone.

Quindi, dove dovremmo posizionare questo blocco WHILE?

Non può essere posizionato in Start, poiché non possiamo utilizzare yield WaitForSeconds lì; inoltre, metterlo in Update non lo ritarderebbe poiché Update viene chiamato ad ogni frame del gioco.

Dobbiamo quindi creare una funzione chiamata "shoot" che restituisce il tipo IEnumerator e include il blocco WHILE.

Questa funzione ci permetterà di avviare una Coroutine utilizzando l'istruzione StartCoroutine con il nome della funzione come parametro tra virgolette.

Dato che il cannone deve iniziare a sparare immediatamente, scriviamo:

"StartCoroutine("shoot");"

all'interno di Start subito dopo aver inizializzato spawnPosition e spawnRotation.

Salviamo lo script e andiamo nell'editor di Unity per provare lo script definito fino a questo punto.

Per poter fermare o riavviare la Coroutine, torniamo allo script e aggiungiamo due istruzioni.

Possiamo fermare la Coroutine controllando se il tasto S è premuto e poi chiamando la funzione StopCoroutine con la Coroutine "shoot" come parametro. Allo stesso modo, possiamo riavviare la Coroutine controllando se il tasto R è premuto e chiamando la funzione StartCoroutine con "shoot" come parametro.

if(Input.GetKeyDown(KeyCode.S)) StopCoroutine("shoot");

if(Input.GetKeyDown(KeyCode.R)) StartCoroutine("shoot");

Dopo aver aggiunto queste istruzioni, salviamo lo script e torniamo nell'editor di Unity per provarlo.

Bene, per questo tutorial è tutto! Spero vi sia stato utile! A presto!

Cerca nei Tutorial

Cerca inserendo una frase o più parole chiave, separate da virgole.

Questo è un sito personale e non costituisce un canale di vendita. Le pagine dedicate ai modelli 3D documentano una selezione dei miei lavori e non contengono offerte, prezzi, procedure di acquisto o collegamenti commerciali. Attualmente non accetto richieste di lavori personalizzati, consulenze o altre collaborazioni professionali.


INFORMATIVA ESTESA SULL'UTILIZZO DEI COOKIES