Respawn Funktion integrieren
Gerade ist es noch so, dass man einfach verschwindet, wenn man von einer Plattform und in das Wasser fällt. In den meisten Spielen würde man nun ein Leben verlieren und am Anfang des Levels respawnen. Dafür müssen wir zuerst herausfinden, wann der Frosch das Wasser berührt. Und hierfür erstellen wir uns ein neues Skript. Zuerst erstellen wir uns aber einen neuen Ordner dafür. Dieser kommt unter Scripts und heißt Game. Und dort kommt ein neues Skript mit dem Namen Water rein. In diesem Skript löschen wir dann zuerst die Start() und Update() Methoden, die automatisch erstellt wurden, da wir diese nicht brauchen. Wir brauchen stattdessen eine Methode, die dann ausgeführt wird, wenn der Frosch das Wasser berührt:
Private void OnTriggerEnter2D(Collider2D collision) {
}
Die collision in der Methode beschreibt das Objekt, welches das Wasser berührt. Wenn wir später mehrere Objekte haben, die möglicherweise das Wasser berühren, wollen wir nicht, dass der Spieler ein Leben verliert. Es soll nur passieren, wenn der Spieler das Wasser berührt. Das müssen wir im Skript sicherstellen. Um das zu tun, geben wir dem Player im Editor einen speziellen Tag. Dafür gehen wir zum Player Objekt und dort sehen wir im Inspector ganz oben, wie er gerade untagged ist. Über das Dropdown-Menü ändern wir das jetzt zu Player um. Zurück im Skript fragen wir nun, ob die collision den Tag Player hat:
if (collision.tag == „Player“) { }
Dann benötigen wir noch einen SceneManager, der die komplette Szene neu lädt, in der if-Abfrage:
SceneManager.LoadScene();
Nun wird uns Visual Studio einen Fehler anzeigen, da wir den SceneManager zuerst importieren müssen. Wir müssen ihn aber nicht selber importieren, Visual Studio hilft uns dabei. Links neben der Zeile Code ist eine Glühbirne erschienen. Wenn wir dort drauf klicken, haben wir die Option das passende Paket zu importieren. Nun sollte oben eine neue Zeile hinzugekommen sein:
using UnityEngine.SceneManagement;
Jetzt müssen wir der Methode noch eine Szene mitgeben. Und zwar die Szene, in der wir uns gerade befinden.
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
Nun gehen wir wieder in den Unity Editor. Hier müssen wir das neue Skript auf unser Wasser-Objekt legen und damit die Kollision funktioniert, braucht es noch eine Box Collider 2D Komponente. Der Collider muss noch von der Größe her angepasst werden, damit er überall ist, wo auch das Wasser ist. Wir machen den Collider aber ein wenig dünner, damit der Frosch erst respawned, wenn er wirklich komplett im Wasser ist. In der Box Collider 2D Komponenten müssen wir dann nur noch das Häkchen bei isTrigger setzen, da unsere Methode ja ausgeführt wird wenn ein Trigger aktiviert wird. Und schon respawned der Frosch immer, wenn er das Wasser berührt.