Unity 3D Tutorial Teil 7

Unity 3D Tutorial – NPC, Gegner und Pathfinding erstellen (7/12)

Gefällt Dir der Artikel? Dann teile ihn doch, um diese Informationen auch anderen zugänglich zu machen!

Seiteninhalt

Im vorherigen Schritt des Unity 3D Tutorials haben wir verschiedene interaktive Objekte in der Szene platziert. Darunter ein Pressure Pad, das mit einer Tür verlinkt ist. Sobald sich der 3D Character auf diesem Pad befindet, wird die Tür geöffnet. Zudem wurde eine bewegliche Plattform hinzugefügt. Die Bewegung wurde in der entsprechenden Komponente mit dem Start- und Zielpunkt definiert.

In diesem Abschnitt lernst du, wie du Gegner zur Szene hinzufügst. Diese sollen natürlich nicht nur in der Szene platziert werden, sondern sich später in der 3D Anwendung dynamisch bewegen. Das lässt sich über das sogenannte Pathfinding in Unity integrieren. Aber starten wir zunächst mit dem Importieren von Gegnern in unserem Level.

Gegner zur Szene hinzufügen

Um Gegner in der 3D Anwendung hinzuzufügen, verwenden wir Prefabs aus dem 3D Gamekit. Navigiere dazu in den Ordner 3D Gamekit -> Prefabs -> Characters -> Enemies. Dort findest du weitere Unterordner, die unterschiedliche Gegner darstellen. Es gibt Chomper, Grenadier und Spitter, die verschiedene Eigenschaften besitzen. Füge doch einmal den Chomper per Drag and Drop an einer beliebigen Stelle in der Szene hinzu.

Gegner in Szene importieren

Wenn du das GameObject Chomper in der Hierarchie selektierst, wirst du feststellen, dass es bereits sehr viele Komponenten gibt. Darunter verschiedene Skripte wie Chomper Behavior, Damageable oder Replace With Ragdoll. Teste doch gleich einmal die Anwendung mit dem Play-Button. Ist die Entfernung zum Gegner sehr groß, befindet er sich im Ruhemodus (Idle). Nähert sich der Character, so sollte der Gegner den Player attackieren. Das funktioniert allerdings bisher noch nicht und es erscheint auch eine Fehlermeldung in der Konsole. Dafür müssen wir noch ein paar Einstellungen vornehmen.

NavMeshSurface beim Gegner hinzufügen

Wir haben noch das Problem, dass der Gegner den Spieler nicht attackiert. Für jeden Gegner, der den Character erkennt, muss dessen Position als Zielposition festgelegt sein. Denn der Gegner soll schließlich den Character attackieren und dafür wird auch dessen Position benötigt. Der Character hat allerdings bereits die Möglichkeit den Gegner zu attackieren und zu zerstören.

Um die Zielposition festlegen zu können, müssen wir noch ein sogenanntes NavMesh erzeugen. Wähle dazu den Untergrund aus. In unserem Unity 3D Tutorial ist das die Plane. Anschließend veränderst du den Layer von 16: Environment auf 22: Terrain. Diese Einstellung ist später für die Berechnung des NavMesh wichtig. Zusätzlich fügst du in diesem GameObject über Add Component die Komponente NavMeshSurface hinzu. Darin findest du den Agent Type. Diesen kannst du auf Chomper ändern. Außerdem wollen wir die Include Layers lediglich auf Environment und Terrain anpassen. Damit wird definiert, auf welcher Oberfläche sich die Gegner bewegen können.

NavMeshSurface in Umgebung

Pathfinding NavMesh erzeugen

Nun ist es wichtig das sogenannte Baking des Navigation Mesh auszuführen. Du kannst dir das Ganze so vorstellen, alle Layer und alle Oberflächen, auf denen sich der Gegner bewegen darf, müssen berechnet werden. Dadurch wird definiert, ob eine Bewegung möglich ist. Beispielsweise auf Basis der Höhe oder ob ein bestimmter Bereich erreichbar ist. Für das Pathfinding werden bewegliche Objekte wie Gegner auch als NavMeshAgent bezeichnet. Der Untergrund, auf dem sie sich bewegen, heißt NavMesh. Um dieses zu erstellen, gibt es den Button Bake.

NavMesh in Unity erstellen

Nachdem du den Button Bake geklickt hast, sollte nach kurzer Zeit der Untergrund blau eingefärbt sein. Das kennzeichnet den Bereich, der für die NavMeshAgents erreichbar ist. In der oberen Abbildung findest du beispielsweise auch Bereiche, die nicht erreichbar sind und dadurch auch nicht blau eingefärbt werden. Wenn neue Objekte in der Szene hinzugefügt oder auch bestehende verschoben werden, dann muss das NavMesh erneut berechnet werden. Das ist sehr wichtig. Jetzt kannst du das Ganze mit dem Play-Button testen. Wenn du dich dem Gegner näherst, sollte er den Character attackieren und ihn auch verfolgen. Teste das doch gleich mit mehreren Gegnern.

Hinweis: Mit dem ultimativen Unity Cheat Sheet erhältst du einen detaillierten Überblick über Tipps & Tricks mit dem Umgang von Unity. Sichere dir jetzt das Cheat Sheet, um deine Anwendungen noch einfacher und effektiver erstellen zu können!

Pathfinding NavMesh anpassen

Wir haben im letzten Schritt das NavMesh berechnet, wodurch sich die Gegner frei bewegen können. Vielleicht ist es aber auch notwendig, dass Bereiche definiert werden müssen, die für Gegner nicht begehbar sind. Wie das genau geht, zeige ich dir jetzt…

Im Unity 3D Tutorial gibt es das Dropship. Hier könnten wir zum Beispiel definieren, dass dieser Bereich für die Gegner nicht betretbar ist. Dafür gibt es das GameObject NavMesh Modifier Volume. Klicke dazu auf das Plus in der Hierarchie und wähle AI -> NavMesh Modifier Volume. Anschließend wird ein Volumen erstellt, mit dem wir diesen Bereich definieren können. In der unteren Abbildung siehst du diesen Bereich.

Zudem ist es wichtig in der Komponente bei Area Type Not Walkable einzustellen. Denn wir wollen verhindern, dass die Gegner sich darin bewegen. Bei Affected Agents hast du außerdem die Möglichkeit einen bestimmten Gegner auszuwählen. Ich lasse das vorerst bei All. Und ein wichtiger Punkt ist der Layer. Hier musst du Terrain verwenden, da ansonsten das Volumen nicht bei der Erstellung des NavMesh berücksichtigt wird.

NavMesh in Unity anpassen

Sobald du alle Einstellungen durchgeführt hast, ist es wichtig das NavMesh zu aktualisieren. Denn aktuell können sich die Gegner weiterhin darin bewegen. Klicke einfach auf den Untergrund und starte die Berechnung mit Bake neu. Danach sollte der Bereich nicht mehr blau eingefärbt sein.

Pathfinding testen

Nachdem soweit alles hinzugefügt wurde, kannst du die Anwendung mit dem Play-Button testen. Laufe einfach auf den Gegner zu, sodass er dir folgt und bewege dich in den vorhin definierten Bereich. Sobald du dich darin befindest und der Gegner dich nicht attackieren kann, halte die Anwendung mit dem Pause-Button an und wechsle zur Scene View. Anhand der blauen Markierung beim Gegner ist zu sehen, dass er den Character erkannt hat. Durch das Volumen ist jedoch eingestellt, dass er es nicht begehen kann. Somit funktioniert das eingestellte Pathfinding.

NavMesh in Unity testen

Im nächsten Schritt werden wir ein User Interface mit einer Lebensanzeige integrieren. Denn aktuell wird das nach einer Attacke der Gegner nicht angezeigt.

Hinweis: Du möchtest eigene 2D/3D Spiele und Anwendungen erstellen? Dann teste jetzt nobreakpoints Pro. Dort findest du in verschiedenen Online-Kursen und Workshops das nötige Wissen, um deine Ideen in die Wirklichkeit umzusetzen.

Free

Trial

Keine Extra-Kosten.
Jederzeit kündbar.

Bist du bereit atemberaubende Spiele und 3D Anwendungen zu erstellen?

*Nach 1 Monat wird die Mitgliedschaft automatisch auf monatlicher Basis zum Premium-Preis verlängert, bis du kündigst. Angebot kann nur einmal pro Nutzer beansprucht werden.

Gefällt Dir der Artikel? Dann teile ihn doch, um diese Informationen auch anderen zugänglich zu machen!

Weitere Blogartikel

Bist du bereit deine eigenen Spiele & Apps zu erstellen?

Teste jetzt alle Online-Kurse mit nobreakpoints Pro und erstelle problemlos deine eigenen 2D/3D Spiele und XR Anwendungen.

Suche

Bist du bereit deine eigenen Spiele & Apps zu erstellen?

Teste jetzt alle Online-Kurse mit nobreakpoints Pro und erstelle problemlos deine eigenen 2D/3D Spiele und XR Anwendungen.