Aus dem Kurs: Unity Grundkurs 1: Schritt für Schritt zum ersten eigenen Spiel

Wasserspritze abfeuern

Aktuell befindet sich die Feuerwehrspritze in einer Endlosschleife. Das Aktivieren und Deaktivieren soll nun über die linke Maustaste gesteuert werden. Dazu verwenden wir innerhalb des Partikelsystems das EmissionModule. Dieses Modul steuert, ob Partikel emittiert werden oder nicht. Über Skript können wir dieses Modul aktivieren oder deaktivieren. Gehen Sie nun in das FireTruckController-Skript. Als Allererstes brauchen Sie eine Referenz auf das Partikelsystem. Erstellen Sie wieder ein SerializeField vom Typ ParticleSystem. Weiterhin brauchen Sie eine Variable vom Typ EmissionModule, um auf das Emission-Modul des Partikelsystems zuzugreifen. In der Awake-Methode holen wir uns nun eine Referenz auf das Modul. In der Update-Methode wollen wir nun den Input des linken Mousebuttons abfangen und damit das Modul aktivieren oder deaktivieren. Dazu verändern wir die enabled-Eigenschaft des EmissionModules. Auch für die linke Maustaste können wir wieder die Input-Klasse benutzen. Diese bietet uns neben den GetAccess-Methoden auch GetKey-Methoden, womit Sie Keyboard-Tasten abfragen können; GetMouseButton, um direkt einen Mousebutton abzufragen oder GetButton, die Sie allgemeingültig für Mousebuttons, Keyboard-Tasten oder Gamepad- oder Joystick-Buttons benutzen können. Alle diese Methoden haben drei unterschiedliche Varianten. Die Down-Methoden geben nur ein einziges Mal true zurück, immer dann, wenn die Taste das erste Mal gedrückt wurde. Die Up-Methoden geben dann true zurück, in dem einzigen Frame, wo die Taste losgelassen wurde, und die normalen Methoden, ohne Up oder Down geben immer dann true zurück, solange die Taste gedrückt wird. Für den aktuellen Anwendungsfall empfiehlt sich die GetButton-Methode, da wir das Partikelsystem immer dann aktiviert haben wollen, wenn die linke Maustaste gedrückt ist. Wie bei den GetAccess-Methoden können Sie auch hier über den String einen Button angeben, in unserem Fall Fire1. Dies ist wieder ein in Unity integrierter Button, der für die linke Maustaste beziehungsweise die Control-Taste steht. Speichern Sie nun das Skript und wechseln zurück in Unity. Sie müssen nun das Partikelsystem mit dem entsprechenden Slot verbinden. Testen Sie danach, ob die Funktion funktioniert. Aktuell ist das Partikelsystem deaktiviert. Wenn ich die linke Maustaste drücke, ist sie aktiviert. Teilweise sehen Sie etwas Splash direkt unten an der Spritze am Fahrzeug. Dies passiert, weil einzelne Partikel direkt mit dem Feuerwehrauto kollidieren. Dies können Sie sehr leicht beheben. Gehen Sie dazu in das Partikelsystem und öffnen das CollisionModule. Dort befindet sich die Eigenschaft Collides With. Dies ist eine Layer-Maske. Dadrin sind alle Layer enthalten, mit denen die Partikel kollidieren. Da die Partikel in unserem Fall nur mit den Häusern kollidieren sollen, können wir hier theoretisch alles deaktivieren. Mit einem Klick auf Nothing wird dies sofort umgesetzt. Nun müssen wir noch einen Layer für die Gebäude definieren. Dazu gehen wir auf Edit > Project Settings > Tags and Layers und definieren im Layers-Menü einen neuen User Layer, zum Beispiel Buildings. Wir gehen zurück ins Partikelsystem und wählen diesen Layer nun als Eigenschaft aus. Damit kollidiert nun das Partikelsystem nicht mehr mit dem Fahrzeug. Wie Sie sehen, kollidieren nun die Particle aber auch nicht mehr mit den Gebäuden. Dies liegt daran, dass die Gebäude momentan noch auf dem Default-Layer liegen. Beenden Sie den Play-Mode und wechseln in den Ordner mit den Häuser-Prefabs. Wählen Sie alle Häuser-Prefabs an und wählen unter Layer den Buildings-Layer aus. Bei der nun folgenden Abfrage können Sie entscheiden, ob Sie nur das Root-Objekt mit dem neuen Layer oder auch alle Kindobjekte mit dem neuen Layer definieren wollen. In unserem Fall reicht es aus, nur das Root-Objekt mit diesem Layer zu definieren. Nun kollidieren die Partikel auch wieder mit den Gebäuden. Vergessen Sie nicht, jederzeit auch das Prefab, in unserem Fall den Firetruck zu applyen, damit alle Änderungen auch übernommen werden. Sie haben gelernt, wie Sie auf ein Partikelsystem im Skript zugreifen können und das EmissionModule aktivieren oder deaktivieren. Außerdem haben Sie gelernt, wie Sie einzelne Layer benutzen können, um Partikel nur mit bestimmten Objekten kollidieren zu lassen.

Inhalt