UE4IconMit dem Voranschreiten in meinem Spieleprojekt Espionage, stoße ich auch ständig auf neue Herausforderungen, die ich mit Blueprints meistern will. In diesem Zusammenhang hab ich mir kürzlich Gedanken zu einem NPC-Patroulliensystem mit Wegpunkten gemacht. Allerdings sollte das Wegsystem einigermaßen flexibel sein, so dass es für verschieden komplizierte Wegpunktpfade eingesetzt wwerden kann. Wie ich das in Blueprints umgesetzt habe, findet ihr in folgendem Artikel.

Soweit ich über Wegpunktesysteme in Unreal Engine im Internet nachlesen konnte, waren diese alle auf dem Ansatz aufgebaut, dass in den Level ein Wegmarker hinzugefügt wurde, der nicht dargestellt ist, aber für den NPC als Ziel seiner Bewegung dient. Basierend auf diesem Ansatz und einiger Tutorials auf Youtube (unter anderen dieses hier AI Navigation Tutorial) zu dem Thema, hatte ich ein Verständnis davon wie ich grundsätlich einen Wegmarker für einen NPC platziere und über einen Blueprint die Bewegungsabfolge steuere. 

Bild 1: Blueprint des AI kontrollierten NPCs. Die Variable Waypoint1 enthält das Objekt zu dem der NPC als nächstes aufen wird. Die Cst*-Events sind für zukünftige Änderungen geplant, so dass der NPC auch nach Levelstart noch getriggert werden kann ( z.B. Spieler kommt in Sicht oder Alarm ausgelöst)

 

Allerdings tendiere ich grundsätzlich dazu meine Lösungen soweit generisch zu halten, dass ich diese später in unterschiedlichtsen Situationen wiederverwenden kann. Deswegen wollte ich das ganze im R

ahmen meines Spiels Universum: Espionage auch so lösen, dass ich nicht bezüglich der Patrouillenmuster eingeschränkt bin. Damit meine ich, dass ich keine EInschränkung der Form, dass der Pfad maximal 5 Wegpunkte haben kann, hinnehmen muss. Aus diesem Grund wollte ich ein Wegpunktesystem für meinen NPC, das prinzipiell beliebig viele Wegpunkte verarbeiten kann.

Der intuitive erste Ansatz war deswegen, dass ich dem NPC über eine Variable in den Blueprint eine Liste aller seiner Wegpunkte mitgeben. Diese Liste würde dann im Blueprint iteriert und der NPC bewegt sich entsprechenden der Sortierung in der Liste von einem Wegpunkt zum anderen. Allerdings stieß ich dabei schnell auf mein erstes Problem, wie ich einem Blueprint in einer Variablen eine Liste von Actor-Objekten mitgeben kann. Denn das sind die Wegpunkte letzten Endes, Actor-Objekte. Im Kontext von Unreal Engine handelt es sich dabei um Actoren, die nicht dargstellt werden. Außerdem war ich dann im Patrouillenweg festgelegt. D.h. ich konnte nicht dynamisch auf Gegebenheiten an einem Wegpunkt reagieren. 

Bild 2: Blueprint zur Umsetzung der Wegpunktlogik. Der Blueprint wird bei Überschneidung von Character und Wegpunkt-Collisionbox getriggert und läßt damit den NPC zum nächsten Wegpunkt laufen.

Deswegen kam mir ein zweiter Gedanke,den ich letzten Endes umgesetzt habe. Ich realisierte ein System von referenzierenden Wegpunkten. Das bedeutet, dass ein Wegpunkt an sich nur sich selber und einen Verweis auf den nächsten anzulaufenden Wegpunkt kennt. Der NPC bekommt zu Beginn eine Referenz auf seinen ersten anzulaufenden Wegpunkt. Mittels "AI move to Location" lässt sich der NPC im Blueprint an sein Ziel bewegen. Am Wegpunkt angekommen, wird der Blueprint des Wegpunktes durch ein BeginCollisionOverlap-Event ausgelöst. Dieser Blueprint setzt für den NPC mittels "AI move to Location" ein neues Ziel. Damit lassen sich beliebig komplexe Patrouillenwege realisieren. Selbst eine Verwzeigung mittels modifizierten (z.B. Verzweigungswegpunkten) Wegpunkten lassen sich damit umsetzen.

Dieses Verfahren setze ich nun in meinem Spiel zunächst für NPCs mit festen Pfaden ein. Die nächste Aufgabe wird dann NPC-Bewegungen mit zufälligen Patrouillenwegen sein, aber dazu gibts dann einen extra Artikel.

Comments powered by CComment

 

Neues

Neue Blogartikel, endlich

infoNach ewigem Stillstand auf meiner Webseite, bin ich endlich dazu gekommen, seit längerem angefangene Artikel zu beenden. Damit stehen nun der Artikel zu der Umstellung meiner Domains auf HTTPS, sowie der Artikel über meine Erfahrungen beim Kompilieren von Qt 5.8.0, statisch und shared, zur Verfügung. Feedback ist gerne als Kommentar oder direkt über die Kontakmailadresse, willkommen.

Gutes Neues Jahr 2017

Wieder ist ein Jahr vorbei, wieder hat sich fast nichts getan und wieder erliege ich der Hoffnung, dass 2017 alles besser wird. Ich wünsche Euch Allen da draußen ein gutes Neues Jahr und viel Erfolg.

HTTPS-Umstellung

HTTPS-UmzugAktuell bin ich dabei den Webserver auf HTTPS umzustellen. Deswegen kann es in nächster Zeit vereinzelt zu verschobenen Webpages und Internal Server Errors kommen. Sobald die Umstellung abgeschlossen ist, gebe ich esh ier bekannt.

 

 

Weiterlesen ...

Ein gutes Neues Jahr 2016

Gutes Neues Jahr

Ich wünsche allen Lesern hier auf der Webseite von SilverCoin GameDevelopment ein gutes, Neues Jahr 2016. Was gibts Neues und wie gehts weiter bei und mit SilverCoin GameDevelopment. Lest weiter...

 

Weiterlesen ...

Umzug

Zusätzlich zu meinem nun beinahe abgeschlossenen Umzug der Webseite, ziehe ich nun auch noch in eine neue Wohnung. Deshalb kann es in der nächsten Zeit zu längeren Updatepausen kommen, schon allein deswegen weil ich für eine gewisse Zeit ohne Telekommunikationsinfrastruktur auskommen muss frown.