Game over kan ongunstig worden gedefinieerd via een game-object. Hiervoor is een gamemanager handig.
Maak een object in het hiërarchievenster, klik met de rechtermuisknop op de transformatiecomponent in het infovenster en stel deze in op Reset. Noem het object dan GameManager.
Voeg een nieuwe component toe en noem deze GameManager. Dit onderdeel is verantwoordelijk voor het wijzigen van statussen in het spel. Het spel kan worden gestart, gestopt of herstart via de Game Manager. Er kan ook een scoreteller worden geplaatst. Het doel van het nieuwe script is in dit geval om het spel opnieuw te starten wanneer je game over bent.
Creëer je eigen nieuwe functie:
ongeldig eindspel
Je hebt een manier nodig om toegang te krijgen tot de GameManager en de functie aan te roepen.
Met de toevoeging Debug.Log ("GAME OVER"); je stuurt "Game Over" als output naar de Unity-console en kijkt of de functie op het juiste moment wordt aangeroepen.
Om toegang te krijgen tot de functie, heb je het Player Collision Script van de speler nodig.
Voeg daar een component voor de Game Manager toe:
openbare GameManager GameManager;
Maak vervolgens een prefab van je personage. Verwijder vervolgens de speler uit je scène. Sleep de speler terug in de scene en je zult zien dat de speler niet gekoppeld is aan de GameManager.
Uiteindelijk gebruik je in dit geval geen variabele, maar verwijder je deze weer.
Je gebruikt om de GameManager te vinden:
ZoekObjectOfType ();
Deze steek je in op het punt waar je het spel wilt laten eindigen.
Heeft een vergelijkbare functie: GetComponent <>
Wijziging in het script van de GameManager
ongeldig eindspel
zu
openbare ongeldig eindspel
Nu kunt u de wijziging aanbrengen in het PlayerCollision-script.
Bij de MainCamera en TextCanvas moet je nu de speler naar binnen slepen zodat er een verwijzing naar de speler ontstaat. Anders krijg je een foutmelding.
Daarnaast moet Game Over worden weergegeven als het personage bijvoorbeeld van een platform valt.
De vereiste wordt gemaakt in het PlayerMovement-script. Als de speler onder een bepaalde waarde op een as staat, wordt Game Over weergegeven.
Voeg in het PlayerMovement-script dit toe aan FixedUpdate:
als (rb.positie.y <-1f)
{
ZoekObjectOfType () .Eindspel ();
}
Het PlayerMovement-script ziet er dan als volgt uit:
Game Over zou nu maar één keer moeten worden weergegeven.
Hiervoor wordt een wijziging aangebracht in de GameManager:
bool gameHasEnded = onwaar;
Onder publieke voide valt:
als (gameHasEnded == false)
{
gameHasEnded = waar;
Debug.Log ("Game Over");
}
Dit beëindigt het spel slechts één keer:
Ten slotte moet het spel opnieuw worden gestart:
Dit wordt in de GameManager ingevoegd:
U hebt void Restart () nodig als een aparte functie.
Onder Debug.Log voegt u toe:
Herstarten ();
Een andere functie die u invoegt onder het gebruik van UnityEngine is:
met behulp van UnityEngine.SceneManagement;
Dit wordt gebruikt voor andere scènes of voor het opnieuw opstarten van de scène.
Nu voeg je de accolades toe onder void Restart:
SceneManager.LoadScene (SceneManager.GetActiveScene (). Naam);
Dit betekent dat je de actieve scene herlaadt vanuit de Scene Manager.
.name staat voor de huidige naam van je scene.
De herstart van het spel gaat momenteel erg snel.
Daarom openen we Lighting in Unity. Als je iets in je spel verandert, is het logisch om de lichteffecten opnieuw te berekenen. Kies Bouwverlichting.
Nu gebruikt u nieuwe parameters:
Vervang Restart door Invoke (“Restart”) in het GameManager-script. Daarna zet je de tijd die moet verstrijken voordat de functie "Restart" wordt aangeroepen.
Roep aan (“Herstart”, 2f);
De vertraging is nu een variabele gemaakt.
Voeg onder bool toe:
openbare float restartDelay = 1f;
In plaats van de 2f hieronder, stel je nu de variabele in.
Het voltooide script ziet er als volgt uit:
Oorspronkelijk gepost 2020-06-08 18:56:00.