Il game over può essere definito sfavorevolmente per mezzo di un oggetto di gioco. Un gestore di gioco è utile per questo.
Crea un oggetto nella finestra della gerarchia, fai clic con il pulsante destro del mouse sul componente di trasformazione nella finestra di ispezione e impostalo su Reimposta. Quindi nomina l'oggetto come GameManager.
Aggiungi un nuovo componente e chiamalo GameManager. Questo componente è responsabile della modifica degli stati nel gioco. Il gioco può essere avviato, interrotto o riavviato tramite il Game Manager. Si può anche piazzare un segnapunti. Lo scopo del nuovo script in questo caso è riavviare il gioco quando si finisce il gioco.
Crea la tua nuova funzione:
finale vuoto
Hai bisogno di un modo per accedere al GameManager e invocare la funzione.
Con l'aggiunta Debug.Log ("GAME OVER"); invia "Game Over" come output alla console Unity e verifica se la funzione viene chiamata al momento giusto.
Per poter accedere alla funzione, è necessario il Player Collision Script dal player.
Aggiungi un componente per il Game Manager lì:
pubblico GameManager GameManager;
Quindi, crea un prefabbricato del tuo personaggio. Quindi elimina il giocatore dalla tua scena. Trascina di nuovo il giocatore nella scena e vedrai che il giocatore non è collegato al GameManager.
Alla fine, in questo caso non usi una variabile, ma la elimini di nuovo.
Usi per trovare il GameManager:
TrovaOggettoDiTipo ();
Inserisci questo nel punto in cui vuoi che il gioco finisca.
Ha una funzione simile: GetComponent <>
Modifica nello script del GameManager
finale vuoto
zu
Finale vuoto pubblico
Ora puoi apportare la modifica nello script PlayerCollision.
Con MainCamera e TextCanvas, ora devi trascinare il player in modo che venga creato un riferimento al player. Altrimenti riceverai un messaggio di errore.
Inoltre, dovrebbe essere visualizzato Game Over se il personaggio cade da una piattaforma, ad esempio.
Il prerequisito viene creato nello script PlayerMovement. Se il giocatore è al di sotto di un certo valore su un asse, viene visualizzato Game Over.
Nello script PlayerMovement aggiungi questo a FixedUpdate:
if (rb.position.y <-1f)
{
TrovaOggettoDiTipo () .Fine del gioco ();
}
Lo script PlayerMovement ha quindi il seguente aspetto:
Game Over ora dovrebbe essere visualizzato solo una volta.
Per fare ciò, viene apportata una modifica nel GameManager:
bool gameHasEnded = falso;
Sotto vuoto pubblico viene:
se (gameHasEnded == falso)
{
gameHasEnded = vero;
Debug.Log ("Game Over");
}
Questo termina il gioco solo una volta:
Alla fine il gioco dovrebbe essere riavviato:
Questo è inserito nel GameManager:
Hai bisogno di void Restart() come funzione separata.
Sotto Debug.Log aggiungi:
Ricomincia ();
Un'altra funzione che inserisci sotto usando UnityEngine è:
utilizzando UnityEngine.SceneManagement;
Viene utilizzato per altre scene o per il riavvio della scena.
Ora aggiungi le parentesi graffe sotto void Restart:
SceneManager.LoadScene (SceneManager.GetActiveScene (). Nome);
Ciò significa che si ricarica la scena attiva dallo Scene Manager.
.name sta per il nome corrente della tua scena.
Il riavvio del gioco sta avvenendo molto rapidamente al momento.
Ecco perché stiamo aprendo Lighting in Unity. Se cambi qualcosa nel tuo gioco, ha senso ricalcolare gli effetti di luce. Scegli Crea illuminazione.
Ora stai usando nuovi parametri:
Sostituisci Riavvia con Richiama ("Riavvia") nello script di GameManager. Dopodiché metti il tempo che dovrebbe passare prima che venga chiamata la funzione "Riavvia".
Invocare ("Riavvia", 2f);
Il ritardo è ora reso variabile.
Sotto bool aggiungi:
float pubblico restartDelay = 1f;
Invece del 2f sotto, ora imposti la variabile.
Lo script finito si presenta così:
Originariamente pubblicato 2020-06-08 18:56:00.