Um einen Level zu beenden benötigst du einen Auslöser. Erstelle dafür einen Würfel und skalliere ihn, wie du ihn benötigst.
Wähle die Y-Achse aus und wechsel mit dem Würfel in die isometrische Ansicht. Ziehe deinen Quader, ans Ende vom Level bzw. dorthin, wo der Level enden soll.
Bezeichne ihn beispielsweise mit End. Da der Auslöser im Spiel nicht gesehen werden soll, deaktiviere den Mesh Renderer. Beim Collider muss „is Trigger“ aktiviert sein.
Wähle im Inspectorfenster ein farbliches Icon aus, damit du die Box noch erkennen kannst.
Ist das Icon nicht zu sehen, öffne die Gizmos in Unity und aktiviere die 3D-Icons mit dem Slider und verschiebe den Regler. Dann erkennst du deinen Auslöser, auch wenn er unsichtbar ist.
Erstelle ein Script namens EndTrigger.
Der Auslöser wird mit
void OnTriggerEnter ( ) entdeckt
Jetzt wird eine Referenz zum GameManager benötigt.
Du erstellst eine Variable: public GameManager gameManager;
Mit dem Bezug auf GameManager, benötigst du im GameManager eine neue Funktion. Deswegen öffnest du jetzt das Script vom GameManager.
Darin erstellst du eine neue Variabe:
public void CompleteLevel ( )
Damit hast du im GameManager eine neue Funktion erstellt:
Diese Funktion kannst du jetzt im EndTrigger-Script aufrufen:
gameManager.CompleteLevel( );
Das TriggerScript sieht jetzt folgendermaßen aus:
Jetzt ziehst du den GameManager in den freien Platz vom Script.
Da momentan nur in der Konsole eine Nachricht erscheint, müssen wir für den Spieler jetzt ein UI erstellen.
Erstelle deswegen in Canvas ein UI-Panel. Wechsel in den 2D-Modus und fokussiere dich mit F darauf. Entferne das Hintergrundbild, damit das UI durchsichtig ist.
Benenne es mit LevelComplete. Füge mit einem Rechtsklick und UI Text hinzu.
Passe die Begrenzungen für deinen Text an. Zentriere ihn schließlich. Ändere die Schriftart. Steigere die Schriftgröße auf z. B. 100
Ändere den Text zu Level. Benenne auch das TextObjekt als Level. Dupliziere das Objekt und benenne es als Complete. Stelle die 2. Schrift nach Bedarf ein. Markierst du beide Objekte gleichzeitig, kannst du sie zusammen verschieben.
Am Ende deaktiviere „Level Complete“.
Wieder wird im GameManager eine Referenz benötigt.
Diese schaffst du mit einer neuen Variable:
public GameObject completeLevelUI;
Desweiteren ergänzt du die Fuktion jetzt unter
public void CompleteLevel ( )
{
completeLevelUI.SetActive(true);
Damit aktivierst du die Funktion.
Das Script sieht jetzt folgendermaßen aus:
Ziehe LevelComplete jetzt in den GameManager.
Wenn du den Level beendest erscheint jetzt Level Complete.
Als nächstes bauen wir eine Animation mit ein. Aktiviere erst einmal die UI wieder. Jetzt benötigst du das Animationsfenster.
Erstelle einen Ordner für die Animation. Benenne die neue Animation mit „LevelComplete“. Im Projektordner findest du jetzt zwei Assets.
Das erste ist die Animation selbst. Deaktiviere Loop, da die Animation nur einmal abgespielt werden soll.
Das zweite ist der Animation Controller, der im Animator erscheint. Mit dem Animator lassen sich komplexe Animationen zusammenbauen und verknüpfen.
Die Animation LevelComplete ist orange unterlegt. Dies bedeutet, dass sie als erste Animation abgespielt wird, wenn der Level abgeschlossen ist.
Gehe zurück zum Animationsfenster. Ist der Record-Mode bzw. der Aufnahmemodus aktiviert, nimmt das System jede Veränderung am Objekt als Keyframes auf.
Wähle beispielsweise 1:00 und setze den Alphamodus der Farbe runter. Automatisch wird am Anfang ein Keyframe erstellt, bei dem der Alphamode noch komplett ist. Wechsel die Position der Keyframes aus. Dadurch erscheint das Level Complete under Alphamode steigert sich dabei. Gehe ungefähr zu 0:50 und senke den Alphamodus für die Farben der Schrift vom UI. Vertausche die entsprechenden Keyframes mit den Vordersten.
Deaktiviere wieder die LevelComplete UI. Am Ende des Levels müsste jetzt das UI Level Complete anzeigen.
Nach ein par Sekunden soll jetzt der neue Level nach ein par Sekunden geladen werden. Füge dafür ein Event kurz vor der 2-Sekunden-Marke hinzu.
Das Animationsevent erlaubt es, eine Funktion zu wählen.
Wir benötigen ein Script für das LevelComplete-Objekt. Dieses Script lädt einen neuen Level. Nenne die neue Komponente: LevelComplete.
Füge in das neue Script:
public void LoadNextLevel( )
ein.
Jetzt kannst du als Funktion LoadNextLevel auswählen.
Immer wenn die Animation an diesen Punkt kommt, wird die neue Szene geladen.
Anschließend soll die Szene wechseln.
Dafür benötigst du den Szenenmanager:
using UnityEngine.SceneManagement;
Unter public void kommt:
SceneManager.LoadScene( )
Jetzt soll immer nur die entsprechende Szene geladen werden. Jedoch hängt die Szene, die geladen werden soll, vom Level ab. Zum Laden wird deshalb der BuildIndex verwendet.
Unter File –> Build Settings zeigt dir Unity deine Szenen an. Gegebenenfalls musst du sie noch hineinziehen. Am Ende wird der Build Index angezeigt. Unity soll die Szene dem Buildindex entsprechend laden bzw. die aktuelle Szene+1.
Unter public void LoadNextLevel kommt:
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
Das Script sieht folgendermaßen aus:
Sorge dafür, dass im Nachhinein immer eine neue Szene steht, da Unity sonst einen Fehler anzeigt.
Originally posted 2020-06-10 18:11:00.