Nicht eingeloggt
Registrieren

Path Node Tutorial

Damit sogenannte Bots (Computergegner) durch einen selbstgebauten Level navigieren können müssen Navigationspunkte gesetzt werden, an denen sich die Bots orientieren können. Die Art der Verteilung innerhalb des Levels und die Vernetzung solcher "PathNodes" miteinander, bestimmt in welcher Weise die Fortbewegung von Computer-gesteuerten Gegnern geschieht. Diese Navigationspunkte können "PathNodes" sein, oder aber auch diverse Subklassen der Klasse "PathNode". Darunter fallen z. Bsp.: "LiftCenter", "PlayerStarts" und "Teleporter". Einige Navigationspunkte werden automatisch gesetzt, wenn der Designer die Pfade deffiniert. So z.Bsp.: "InventorySpots" und "WarpZoneMarkers". Wiederum andere (AlarmPoints, ButtonMarkers, PatrolPoints, QueenDests, SpawnPoints, Transporters, und TriggerMarkers) werden nur für Unreal1/KHG gebraucht und sind in späteren Versionen des Spiels (UT/WoT) nicht mehr benutzt.
Dieses Tutorial ist Bestandteil der UnrealED.de Tutorials-Sammlung Teil:01.
Du kannst alle unsere Tutorials auch als Offline-Version in unserem Download-Sektor herunterladen.

 



Wie Reagiert der Bot?
Zum Navigieren wird ein gerade im Level geborener Bot immer die nächsterreichbare "PathNode" ansteuern und sich in das Navigations-Netzwerk einklinken. Der Bot wird dann das Navigationsnetzwerk benutzen, um bis zu seinem Zielort vorzukommen. Dabei wird der Bot von "PathNode" zu "PathNode" vorrücken. Damit er dies tun kann, ist es wichtig, daß die "PathNodes" immer in Sichtweite zueinander liegen, denn wenn der Bot keine "PathNode" findet, auf die er vorrücken kann, bleibt er hängen (läuft im Kreis).

Findet der Bot keine gültige "PathNode" Netzwerverkettung vor, ist also ein bestimmter Platz im Level, den der Bot erreichen muß nicht abgedeckt, wird er das Navigations-Netzwerk verlassen und wie ein besoffener Penner im Kreis wandern. Dieser Effekt mag bei "DeathMatch" Maps weniger störend auffallen als bei "CaptureTheFlag" oder Assault. Bei letzteren Maps ist eine PathNode Optimierung und Definition (Welchem Team gehört welcher Pfad - siehe unten!) dringend angesagt.

Man sollte also bedenken, daß sich ein Bot nur auf vorher erstellten Pfaden und Wegen innerhalb des Levels bewegen kann. Sind also in einem Abschnitt des Levels keine "PathNodes" gesetzt, wird der Bot später im Spielverlauf die Gegend meiden, sie sogar gar nicht benutzen, außer man drängt ihn dorthin!



Erstellen des Navigationsnetzwerks

Nachdem alle wichtigen architektonischen Feinheiten deiner neuen Map erstellt sind, dies beinhaltet alle Türen und Aufzüge, sowie alle Spezial-Navigations-Punkte ("PlayerStarts" und "Inventory"), kannst du daran denken das Navigations-Netzwerk zu erstellen. Dazu ist es nötig den kompletten Level in regelmäßigen Abständen mit "PathNodes" zu versehen. (UT bietet ab Version 402 eine automatische "PahNode" Vorgenerierung an / tippe "paths build" oder "paths build lowopt" in das log.Fenster). Wenn du von Hand vorgehen willst, setze jeweils eine "PathNode" in die Mitte von Kreuzungspunkten, Kurven und Ecken des Levels, mit jeweils so viel Abstand zu Wänden und Böden, wie möglich (Immer mittig des Raumes setzen - mindestens 48 Einheiten von Wand und Boden entfernt und sie dürfen max. 640 Welteinheiten auseinander liegen, auf Schrägen und Treppen nur 320 Einheiten.).

Jede PathNode muß Sichtkontakt zu ihrer nächstmöglich erreichbaren Nachbareinheit haben (Überprüfe dies immer in der 3D-Ansicht!). An Stellen, an denen schon ein Spezial Navigations Punkt gesetzt wurde, macht ein standard "PathNode" keinen Sinn, sondern höchstens Probleme (der Bot springt von einem zum anderen "PathNode" und bleibt hängen). Ziel sollte es sein so wenig wie möglich "PathNodes" zu verteilen, so daß der kompl. Level abgedeckt wir. Beachte aber den Abstand von Pfad zu Pfad.



Definition des Navigationsnetzwerks
Der letzte Schritt, ein Navigations-Netzwerk zum laufen zu bringen, ist die Definition der PathNode Zugehörigkeit. Dies kann man durch drücken des "Paths Define"-Buttons in der "Lighting"-Sektion des "Rebuild"-Fensters erreichen, oder durch die Eingabe des Befehls "paths define" in des log.Fenster, oder aber du drückst F8, klickst auf das Kapitel "Lightning" und klickst auf den Schalter Path Define.Im Menue unter "View" befindet sich die Option "Show Paths". Wird diese aktiviert kann man die Vernetzung der PathNodes untereinander erkennen. Sie werden durch rote oder blaue Verbindungslinien gekennzeichnet. Im DeathMatch werden Bots die blauen Pfade den roten Pfaden vorziehen, im CTF- oder AS-Modus kennzeichnen die zwei Farben jedoch die Teamzugehörigkeit der Pfade. (Team0=blau / Team1=rot). nachdem man eine Veränderung an den Pfaden vorgenommen hat, ist jeweils eine neue Pfad Definierung von Nöten.



Optimierung des Navigationsnetzwerks
Es gibt mehrere Möglichkeiten das Navigations-Netzwerk zu optimieren. Dadurch ist oft eine bessere Performance des Spiels möglich, sowie eine generelle Verbesserung des Navigations-Netzwerks:
1. Achte darauf minimal 48 Welteinheiten zwischen den PathNodes einzuhalten
2. Achte darauf maximal 640 Welteinheiten zwischen den PathNodes einzuhalten
3. Achte darauf "InventorySpots" nicht zu dicht an PathNodes zu setzen

Das log.Fenster wird Warnungen über zu dicht / oder zu weit entfernte Navigationspunkte enthalten, während des "paths define"-Prozesses. Auch der "paths build"-Prozess (ab UT Version 402) liefert Fehlermeldungen über sich gegenseitig störende PathNodes. Bots können unter anderem auch Probleme bekommen, wenn die Navigations-Punkte zu dicht an Wände oder Böden gesetzt sind, oder auf keine einheitliche Höhe gesetzt wurden (optimal: 48 Welteinheiten zwischen Wand/PathNode oder Boden/PathNode). In Einzelfällen ist auch eine Optimierung der "Threshold" und "Collision"-Werte der störenden PathNodes von Nöten.

Um Unterwasserpfade zu gestalten, muß die "PathNode" unterhalb der Wasseroberfläche positioniert werden, so daß sie vollständig im Wasser liegt. Ist dies nicht der Fall, benutzen die Bots diese "PathNode" als Landeplatz um anschließend ihren Freischwimmer ins Wasser zu setzen!



PathNodes Attribute

Es gibt nur ein einziges Attribut für alle "Path Node"-Klassen: "bOneWayPath". Setzt man diese Attribut auf "True" dann ist der gesetzte Pfad nur aus der Richtung zu begehen, wie ihn seine Pfade vorgeben. Standardmäßig ist diese Attribut allerdings auf "False" gesetzt, was den Effekt hat, daß alle Pfade sowohl vorwärts als auch rückwarts begangen werden können (Reversiv). Gerade wenn man mit "Movers" wie etwa Türen und Aufzüge einzelne Wegabschnitte temporär sperren kann, ist das Attribut auf "True" zu setzen, da sonst die Bots gegen die verschloßene Türe rennen. Oder sie wollen den Aufzug benutzen, begeben sich an die richtige Stelle, aber der Aufzug ist gar nicht da, sie bleiben darunter stehen und blockieren den Aufzug!



ENDE
 
Nachdem wir unsere erste Map in den geometrischen Bestandteilen zusammengebastelt haben, fehlt noch ein wichtiger Bestandteil des Levels, damit er auch spielbar wird: Die PathNodes (Wegpunkte) und die Sezial-Navigation für bestimmte Wegpunkte, an denen unsere Bots später im Spiel spezielle Handlungen wahrnehmen sollen (z.Bsp. Abschnitt bewachen oder verteidigen, Sniper-Position einnehmen oder aber Campen). Wie man die BotNavigation setzt und danach optimiert, also den Level-Gegebenheiten anpasst, zeigen wir in diesem Tutorial.


Abbildung: 01

Um die weiteren Schritte des Tutorials mitzuverfolgen, solltest du bereits einen geometrisch fertigen Level vor dir liegen haben, in dem nur noch die BotAI oder Gegnerintelligenz fehlt. Wir nutzen einen Aussenlevel und fügen dort jetzt Navigationspunkte hinzu. Dazu gehen wir wie folgt vor:


Abbildung: 02

Im oberen Bild sehen wir einen Weg zwischen Felsen. Menschliche Gegner erkennen mit dem Auge, daß man dort langlaufen kann, ein Bot (Computergegner) jedoch würde im Moment diesen Weg nicht nutzen, da er noch keine Wegpunkte enthält, an denen er sich orientieren kann. Der Bot ist im allgemeinen recht dumm und versteht ohne Hilf nicht was zu machen ist. In diesem Fall würde er einfach nur dumm in der Gegend rumstehen und faulenzen. Das jedoch ist nicht was wir wollen. Ziel ist es, den Weg auch für Computergegner gangbar zu machen.


Wir öffnen als erstes den "Actor Class Browser" über diesen Button: Es öffnet sich ein Fenster, welches etwa so aussehen wie auf unserer Abbildung:02 (rechts).


Dort im Fenster klappen wir als erstes den Punkt "Actor" aus und wählen danach die ziemlich weit unten gelegene Rubrik "NavigationPoint". Diese Oberklasse wird ebenfalls aufgeklappt, es erscheinen weitere Unterklassen der Rubrik "NavigationPoint". Und selektieren die Klasse "PathNode" wie in der rechten Abbildung ersichtlich. Jede auf diese Weise selektierte Unterklasse kann dann im späteren Verlauf des Arbeitsprozesses in die Map gesetzt werden.


Bitte beachte: daß die gewünschte Klasse immer farblich hinterlegt ist, sonst klappen die nachfolgenden Schritte nicht!


Wenn also unsere Unterklasse "PathNode" selektiert wurde, bewegen wir unser Augenmerk wieder in Richtung der von uns erstellten Geometrie:


Mit der rechten Maustaste klicken wir auf die Stelle in unserer Map, an der wir einen "PathNode" setzen wollen, es erscheint ein Optionsmenü. Dort wählen wir jetzt "Add PathNode Here" (vgl. Abbildung: 03)


Abbildung: 03

Nachdem wir die oberen Schritte gemacht haben, sollte an der gewünschten Stelle eine "PathNode" entstanden sein. Das ganze sieht dann so aus, wie in unserer folgenden Abbildung (04). An der gewünschten Stelle ist ein kleines braun-beiges Äpfelschen entstanden. Unser erster Wegpunkt ist erstellt. Natürlich reicht das ganze noch nicht aus, um einem Bot zu erklären, daß er dort einen gangbaren Weg findet. Aber es ist ein Anfang!


Abbildung: 04

Als nächstes setzen wir noch ein paar Wegpunkte mehr, wie eben gelernt klicken wir mit der rechten Maustatste auf die Stelle, an der wir den nächsten Punkt erstellen wollen. Wir wiederholen also die PathNode-Positionierung. (Als Mindestabstand empfehle ich zumindest c.a. 256 WE [Welteinheiten] Abstand zu gewährleisten zwischen den einzelnen "PathNodes" und als Maximalabstand höchstens 640 WE zwischen den einzelnen PathNodes platz zu lassen.) In unserem Beispiel haben wir, durch die leichte Verwinkelung der Architektur beding, relativ kurze Abstände zwischen den PathNodes gewählt, und vier weitere Exemplare dieser Gattung gesetzt. Jeweils so, daß man den nachfolgenden "PathNode" vom letzten aus im Blickfreld hat (vgl. Abbildung: 05).



Abbildung: 05


Wenn ein "PathNode" vom letzten nicht in Sichtweite liegt, klappt später die Vernetzung an dieser Stelle nicht richtig. Wir versuchen also die "PathNodes" so zu setzen, daß später relativ wenig Probleme auftreten. Gelingt dies nicht auf Anhieb, haben wir später noch Zeit einige Feinkorrekturen an der Navigation vorzunehmen.

Wir müssen die Map jetzt einmal Rendern mit allen Optionen aktiviert (insbesondere "Define Paths"), wenn unser ganzer Level mit diesen "PathNode"-Äpfelchen ausgefüllt ist.

Alternativ kann man auch den den Spezial-Button nutzen (nur, wenn keine Änderungen an der Architektur vorgenommen wurden seit dem letzten Rendern), dieser führt dann eine Schnellrenderung der Navigationspunkte durch, ohne das große Menü aufzurufen, und die ganze Architektur nochmal zu rendern!


Wenn das Rendern abgeschlossen hat, schauen wir uns mal an, ob alles geklappt hat, wie wir das wünschen. Dazu klicken wir mit der rechten Maustaste in den grauen Balken oberhalb des 3D-Fensters, es erscheint ein Optionsmenü, wie auf unserer Abbildung (06) ersichtlich:



Abbildung: 06

Unter dem Menüpunkt "View" befindet sich ein weiteres Untermenü, dort wählen wir jetzt "Show Paths", um die Verbindungslinien zwischen den einzelnen gesetzten "PathNodes" sichtbar zu machen. Die 3D-Ansicht sollte sich jetzt geringfügig ändern und etwa so aussehen, wie auf unserer Abbildung (07) ersichtlich.


Abbildung: 07


In unserem Fall ist alles in Ordnung, jetzt kann ein Bot diesen Weg tatsächlich erkennen und ihn langlaufen. Allerdings wird er nur blaue Verbindungslinien akzeptieren. Ist ein Verbinder zwischen zwei PathNodes rot, wird dieser Weg nur im Notfall von einem Bot genutzt. Der Bot wird aber auf jeden fall einen blauen weg einem roten vorziehen, wenn er die Wahl hat und nicht in die Enge getrieben wird. Achte also darauf, daß die Verbinder immer blau sind. Sollte dies nicht der Fall sein, solltest du durch Verschieben des "PathNodes" nach Rechts oder Links dafür sorgen, daß er blau wird.

ACHTUNG: Um zu prüfen, ob die Verschiebung der PathNodes auch funktioniert hat, musst du wieder den Level auf die oben beschrieben Art rendern, erst dann ändert sich auch die Verbindungslinien in der Farbe!

Ebenfalls gilt es die Tauglichkeit der gesetzten Wegpunkte jeweils durch intensive Spieltests zu überprüfen. Oft kommt es vor, daß ein Bot trotz blauem Verbinder irgendwie mit der Architektur des Levels in Konflikt kommt und womöglich an Ecken und/oder Wandflächen hängen zu bleibt. In diesem Fall kann man versuchen die wegpunkte solange zu verschieben, bis der Bot es versteht, oder aber man muss die Architektur ändern, um zu erreichen, daß der Bot den Weg beschreitet. Dies kann unter Umständen in zu engen Gängen vorkommen. Wird dann aber meistens durch einen roten oder fehlenden Verbinder gekennzeichnet.

Gerade bei CTF-Maps kann ein fehlender oder roter Verbinder zu Problemen führen, die darin gipfeln, das ein Team den Weg zur Flagge nicht finden kann. Es ist also empfehlenswert in Ruhe und sehr sorgfältig die wegstrecken abzuscrollen und zu prüfen, ob auch wirklich alles nach Wunsch verbunden wurde. Generell kann man die Verbinder nicht von Hand setzen, sie entstehen beim Rendern automatisch und werden auch nur an den Stellen gesetzt, an denen sie sinnvoll sind.

Wem unser Tutorial zu kompliziert ist, kann auch versuchen in die Konsole von UT den befehl "Paths Build" einzugeben, der Editor versucht dann automatisiert den Level mit "PathNodes" auszustatten. Dies jedoch klappt nicht immer, gerade bei großen Räumen, unter Wasser oder in Aussenarenen versagt diese Option. Dann muss man eben doch von Hand zum Ziel kommen.



Spezial-Navigationspunkte:
Die oben beschriebene Ausstattung mit "PathNodes" muss für jeden Level durchgeführt werden. Jedoch ist das noch längst nicht alles, was zu tun ist, um einem Bot verständlich zu machen, was er in verschiedenen Situationen und Stellen des Levels zu tun hat. Es gibt noch eine Vielzahl von Spezial-Navigationspunkten, die gesetzt werden können/müssen, diese Stellen wir in unserem Tutorial Spezial Navigation vor. Zu finden und zu handhaben sind diese speziellen Wegpunkte ganz ähnlich, wie der normale "PathNode". Nur der Bot wird dann angewiesen eine spezielle Handlungsweise an dieser stelle der map durchzuführen.




ENDE