Game Over kan defineres ugunstigt via et spilobjekt. En spilmanager er nyttig til dette.
Opret et objekt i Hierarki-vinduet, højreklik på Transform-komponenten i Inspector-vinduet og indstil det til Nulstil. Navngiv derefter objektet GameManager.
Tilføj en ny komponent og navngiv den GameManager. Denne komponent er ansvarlig for at ændre statistikker i spillet. Spillet kan startes, afsluttes eller genstartes via Game Manager. En scoretæller kan også placeres. Målet med det nye script i dette tilfælde er at genstarte spillet, når du går til Game Over.
Opret din egen nye funktion:
ugyldigt Slutspil
Du har brug for en måde at få adgang til GameManager og kalde funktionen.
Med tilføjelsen Debug.Log(“GAME OVER”); send "Game Over" som output til Unity-konsollen og se om funktionen kaldes på det rigtige tidspunkt.
For at få adgang til funktionen skal du bruge Player Collision Script fra afspilleren.
Tilføj en komponent til spiladministratoren der:
offentlige GameManager GameManager;
Dernæst skal du lave en præfabrikation af din karakter. Slet derefter afspilleren fra din scene. Træk afspilleren tilbage til scenen, og du vil se, at afspilleren ikke er knyttet til GameManager.
I sidste ende bruger du ikke en variabel i dette tilfælde, men sletter den igen.
Du bruger til at finde GameManager:
FindObjectOfType ( );
Indsæt dette på det punkt, hvor du vil have spillet til at slutte.
En lignende funktion har: GetComponent<>
Ændring i scriptet til GameManager
ugyldigt Slutspil
zu
offentlig ugyldig Slutspil
Nu kan du foretage ændringen i PlayerCollision-scriptet.
For MainCamera og TextCanvas skal du nu trække afspilleren ind, så der oprettes en reference til afspilleren. Ellers får du en fejlmeddelelse.
Derudover skal Game Over vises, hvis figuren for eksempel falder ned fra en platform.
Forudsætningen er oprettet i PlayerMovement-scriptet. Når spilleren er under en bestemt værdi på en akse, vises Game Over.
Tilføj dette til FixedUpdate i PlayerMovement-scriptet:
if (rb.position.y < -1f)
{
FindObjectOfType ( ).Endgame( );
}
PlayerMovement-scriptet ser så således ud:
Nu skulle Game Over kun vises én gang.
Der er lavet en ændring i GameManager til dette:
bool gameHasEnded = falsk;
Under offentlig tomrum kommer:
if (gameHasEnded == falsk)
{
gameHasEnded = sand;
Debug.Log(“Game Over”);
}
Dette afslutter spillet kun én gang:
Til sidst skal spillet genstartes:
Dette er indsat i GameManager:
Du skal void Genstart ( ) som en separat funktion.
Under Debug.Log tilføj:
Nulstil( );
En anden funktion du tilføjer under ved hjælp af UnityEngine er:
ved hjælp af UnityEngine.SceneManagement;
Dette bruges til andre scener eller til genstart af scene.
Tilføj nu i de krøllede parenteser under void Genstart:
SceneManager.LoadScene(SceneManager.GetActiveScene().navn);
Det betyder, at du genindlæser den aktive scene fra Scene Manager.
.name står for det aktuelle navn på din scene.
Genstarten af spillet er i øjeblikket meget hurtig.
Derfor åbner vi Lighting in Unity. Hvis du ændrer noget i dit spil, giver det mening at få genberegnet lyseffekterne. Vælg Byg belysning.
Nu bruger du nye parametre:
Erstat Genstart med Invoke ("Genstart") i GameManager-scriptet. Bagved indstiller du den tid, der skal gå, indtil "Genstart"-funktionen kaldes.
Påkald ("Genstart", 2f);
Forsinkelsen er nu gjort til en variabel.
Under bool tilføj:
public float restartDelay = 1f;
I stedet for 2f nedenfor, indstiller du nu variablen.
Det færdige script ser sådan ud:
Oprindeligt sendt 2020-06-08 18:56:00.