Ludo finita povas esti difinita malfavore per ludobjekto. Ludmanaĝero utilas por tio.
Kreu objekton en la hierarkia fenestro, dekstre alklaku la transforman komponenton en la inspekta fenestro kaj starigu ĝin al Restarigi. Tiam nomu la objekton kiel GameManager.
Aldonu novan eron kaj nomu ĝin GameManager. Ĉi tiu ero respondecas pri ŝanĝado de statusoj en la ludo. La ludo povas esti komencita, haltigita aŭ rekomencita per la Ludestro. Poentotablo ankaŭ povas esti metita. La celo de la nova skripto ĉi-kaze estas rekomenci la ludon kiam vi finludos.
Kreu vian propran novan funkcion:
malplena finludo
Vi bezonas manieron aliri la GameManager kaj alvoki la funkcion.
Kun la aldono Debug.Log ("LUDO FINITA"); sendu "Game Over" al la Unity-konzolo kaj vidu ĉu la funkcio estas vokita en la ĝusta tempo.
Por povi aliri la funkcion, vi bezonas la Ludilan Kolizian Skripton de la ludilo.
Aldonu eron por la Ludestro tie:
publika GameManager GameManager;
Poste kreu prefabrikon de via rolulo. Poste forigu la ludilon de via sceno. Trenu la ludilon reen en la scenon kaj vi vidos, ke la ludanto ne estas ligita al la GameManager.
Finfine vi ne uzas variablon ĉi-kaze, sed forigu ĝin denove.
Vi kutimas trovi la GameManager:
TrovuObjektonDeTipo ();
Vi enmetas ĉi tion en la punkto, kie vi volas, ke la ludo finiĝu.
Havas similan funkcion: GetComponent <>
Ŝanĝo en la skripto de GameManager
malplena finludo
zu
publika malplena Finludo
Nun vi povas fari la ŝanĝon en la skripto de PlayerCollision.
Kun la MainCamera kaj TextCanvas vi nun devas treni la ludilon por krei referencon al la ludilo. Alie vi ricevos erarmesaĝon.
Krome, Game Over devas montriĝi se la rolulo falas de platformo, ekzemple.
La antaŭkondiĉo estas kreita en la skripto PlayerMovement. Se la ludanto estas sub certa valoro sur akso, Game Over estas montrata.
En la skripto de PlayerMovement aldonu ĉi tion al FixedUpdate:
se (rb.position.y <-1f)
{
TrovuObjektonDeTipo () .Endgame ();
}
La skripto de PlayerMovement tiam aspektas jene:
Game Over nun nur montriĝu unufoje.
Por fari tion, ŝanĝo estas farita en GameManager:
boola ludoHasEnded = falsa;
Sub publika malpleno venas:
se (ludoHasEnded == malvera)
{
gameHasEnded = vera;
Debug.Log ("Ludo Finita");
}
Ĉi tio finas la ludon nur unufoje:
Fine la ludo devas esti rekomencita:
Ĉi tio estas enmetita en la GameManager:
Vi bezonas nulan Restart () kiel aparta funkcio.
Sub Debug.Log vi aldonas:
Rekomenci ();
Alia funkcio, kiun vi enmetas uzante UnityEngine, estas:
uzante UnityEngine.SceneManagement;
Ĉi tio estas uzata por aliaj scenoj aŭ por la sceno rekomenci.
Nun vi aldonu la buklajn krampojn sub malplena Rekomenci:
SceneManager.LoadScene (SceneManager.GetActiveScene (). Nomo);
Ĉi tio signifas, ke vi reŝargas la aktivan scenon de la Sceneja Administranto.
.name signifas la nunan nomon de via sceno.
La rekomenco de la ludo okazas tre rapide nuntempe.
Tial ni malfermas Lumigadon en Unueco. Se vi ŝanĝas ion en via ludo, havas sencon rekalkuli la lumefektojn. Elektu Konstrui Lumon.
Nun vi uzas novajn parametrojn:
Anstataŭigi Rekomenci per Invoke ("Rekomenci") en la GameManager-skripto. Post tio vi metas la tempon, kiu devus pasi antaŭ ol la funkcio "Rekomenci" estas vokita.
Alvoki ("Rekomenci", 2f);
La prokrasto nun fariĝas variablo.
Sub bool aldonu:
publika flosilo restartDelay = 1f;
Anstataŭ la 2f sube, vi nun agordas la variablon.
La finita skripto aspektas tiel:
Origine afiŝita 2020-06-08 18:56:00.