Nicht eingeloggt
Registrieren

Navigation und BOT KI

Standard-Navigation

Die Navigations-KI der Unrealengine basiert auf Path Nodes. Diese werden überall dort platziert, wo sich Bots später aufhalten und fortbewegen sollen. Wie andere Actors auch, werden Path Nodes, eine Unterklasse der Navigation Points über das Kontextmenü der rechten Maustaste gesetzt, ein Auswählen im Actor Class Browser ist bei den normalen Path Nodes standardmäßig nicht nötig.



Um eine geordnete Bewegung der Bots zu gewährleisten, müssen die Path Nodes zu einem Netzwerk verbunden werden, dies geschieht beim Rebuilden automatisch, Vorraussetzung ist jedoch, dass sie weniger als ca. 1200 WE von einander entfernt sind. Direkt in unmittelbarer Nähe von Player Starts müssen keine Path Nodes gesetzt werden, da diese selbst zu den Navigation Points gehören. Gleiches gilt auch für Waffen und andere Pickups: Unsichtbare Inventory Spots werden automatisch platziert.

Sich vorzustellen, wie Path Nodes korrekt platziert werden, ist mitunter nicht einfach. Ziel ist es letzten Endes, jedes Gebiet so mit Path Nodes oder anderen Navigation Points zu bestücken, dass ein Bot von keiner Stelle aus weiter als 1200 WE vom nächsten Punkt entfernt ist. Dabei ist zu beachten, dass der Weg jeweils vollkommen frei von Störungen sein muss, das heißt, der Bot muss den Weg direkt und ohne Umwege gehen können


Einige Tipps zum Setzen von Path Nodes:
  • Von jeder Stelle aus muss mindestens ein Path Node in der Nähe und erreichbar sein.
  • Weniger ist mehr. Den Boden geradezu mit Path Nodes zu pflastern bringt nur Nachteile.
  • Wichtig ist auch die richtige Höhe, in der die Path Nodes gesetzt werden. Am besten ist es, sie im 3D-Fenster zu setzen, da so sie richtige Höhe praktisch immer erreicht wird.



Im Bild erkennt man, dass links einige Fehler gemacht wurden: Der Player Start ist mit dem Pfadnetzwerk nicht verbunden, die Abstände der Nodes darüber sind zu hoch und ganz oben werden keine Pfade gebildet, weil ein Brush im Weg ist.
Rechts wurden die Fehler behoben. (Die Grafik dient nur zu Demonstrationszwecken, das Botpathing ist hier keineswegs gut.)


Wie schon erwähnt, wird das Pfadnetzwerk beim Rebuilden erzeugt, es gibt mehrere Möglichkeiten, dies zu bewerkstelligen:
  • Rebuild Paths berechnet das komplette Pfadnetzwerk, aber nichts anderes
  • Rebuild Changed Paths berechnet nur die Teile des Netzwerkes, die sich geändert haben, also neue, gelöschte und bewegte Navigation Points.
  • Rebuild All berechnet alles, inklusive dem Pfadnetzwerk



Nachdem man seine Path Nodes gesetzt hat, möchte man natürlich gerne sehen, wie gut man gearbeitet hat. Dafür wird im View-Menü der einzelnen Ansichten die Option "Show Paths" aktiviert. (Rechtsklick auf die jeweilige Ansichten-Menüleiste)



Nun werden die Pfade als dünne, farbige Linien zwischen den einzelnen Navigation Points angezeigt.



Die verschiedenen Farben dienen hier dazu, dem Benutzer weitere Informationen zu vermitteln:
  • Weiß steht für Pfade die sehr breit sind, dies ist der Idealzustand.
  • Grün für Pfade die relativ breit sind.
  • Blau für diejenigen die schmal sind.
  • ein helles Rosa beschreibt Pfade die auf Ladder Volumes zurückzuführen sind.
  • kräftiges Pink ist für alles, was mit Movern zu tun hat.
  • Gelb steht für Forced Paths, erzwungene Pfade. Es ist möglich im Feld Forced Paths eines Path Nodes den Namen eines anderen festzulegen. Der so definierte Pfad ist immer dann hilfreich, wenn zwei Knoten sonst nicht verbunden werden.
  • Rot steht für ?verbotene? Pfade, die Proscribed Paths. Sie werden ebenfalls über ein eigenes Feld definiert und haben genau den entgegengesetzten Nutzen von Forced Paths.











Da es manchmal recht kompliziert sein kann, den Überblick über das Netzwerk zu behalten, gibt es unter Tools im Menü die Option "Review Paths" um dem Anwender die Arbeit zumindest ein wenig zu vereinfachen. Hier werden einige Faktoren untersucht, die einfachste stellt wohl die Suche nach genügend Player Starts dar. Die eventuellen Fehlermeldungen sollten wohl selbsterklärend sein.


Weitere Navigation Points
Außer den Path Nodes und den schon erwähnten Inventory Spots sowie den Player Starts gibt es natürlich noch mehr Navigation Points.

Hier die wichtigsten:

Leitern

Beim Rebuilden werden bei den sog. Ladder Volumes automatisch oben und unten Leiter-Navigationspunkte gesetzt, diese lassen sich aber auch manuell platzieren, in diesem Fall sollte allerdings die "bAutoPath" Eigenschaft des entsprechenden Volumens auf "false" gesetzt werden. Zu finden sind sie unter Small Navigation Points --> Ladder.




Jump Pads

Um Jump Pads zu verwenden, wird an der gewünschten Position ein UTJumpPad-Actor gesetzt. Die richtige Richtung wird erreicht, in dem man in das Forced Paths[]-Feld das Ziel (in Form eines Path Nodes) angibt.

Obwohl die nötige Beschleunigung, die zum Erreichen des Ziels nötig ist beim Rebuilden automatisch berechnet wird, ist es möglich, die Eigenschaft JumpZModifier zu ändern, um das Jump Pad den eigenen Vorstellungen anzupassen.

Jump Spots

Jump Spots sind eine Unterklasse der Jump Dests.

Sie dienen dazu, den Bots Stellen zu zeigen, die sie z.B. mit einem Doppelsprung oder per Impact-Jump erreichen können. Der Path Node, der Ausgangspunkt des Sprungvorgangs ist, bekommt den JumpSpot in sein Forced-Paths[]-Array eingetragen. Bei Sprüngen, die in beide Richtungen möglich sein sollen, werden zwei Jump Spots verwendet, die gegenseitig in die Forced Paths eingetragen werden.

Mover - Aufzüge

Aufzüge werden in UT2k3 durch Mover realisiert, wie diese aus Static Meshes hergestellt werden, wird hier nicht behandelt, wohl aber, wie man sie in ein Pfadnetzwerk integriert.

Für die Aufzüge müssen zwei Arten von Navigation Points betrachtet werden: Die Lift Centers werden, wie der Name schon sagt, in der Mitte des Lifts platziert; Bei getriggerten Movern muss der tag des Triggers in LiftTrigger eingetragen werden, in jedem Fall muss der tag des Movers muss bei LiftTag eingefügt werden, gleiches gilt bei den Lift Exits. Die Lift Exits werden an jedem Ausgang des Aufzugs in einiger Entfernung platziert. (Dies ist wichtig, um zu verhindern, dass der Lift an einem Bot hängen bleibt, bzw. anders rum.)

Optional kann bei jedem Lift Exit unter Suggested Key Frame die Keyframe-Nummer des Movers eingetragen werden, bei der der Ausgang benutzt werden soll.




Defense Points in Unreal Tournament 2003

Im Vergleich zu UT ist das Setzen von Defense Points in UT2003 wesentlich schwieriger. Der Grund dafür ist das wesentlich umfangreichere und flexiblere System von KI-Scripten, das in UT 2003 Verwendung findet.

Zunächst muss ein Game Objective gesetzt werden, welches hängt vom Typ der Map ab. Alle Game Objectives sind unter NavigationPoint --> JumpDest --> JumpSpot --> GameObjetive zu finden. (Für eine CTF-Map sind das zum Beispiel xBlueFlagBase und xRedFlagBase.)

Das jeweilige Game Objective hat die Eigenschaft DefenseScriptTags, hier ist eine beliebige Bezeichnung anzugeben, wie etwa ?RoteFlagge?. Außerdem muss für Spieltypen, bei denen die Game Objectives ?den Besitzer wechseln?(z.B. DOM) die Eigenschaft bTeamControlled auf ?true? gestellt werden. Für alle Spieltypen, bei denen das Game Objective fest einem Team gehört (Wie etwa CTF), muss stattdessen bei DefenderTeamIndex die Teamnummer eingestellt werden. (0 für Rot und 1 für Blau)



Der eigentliche Defense Point ist ein Actor der Klasse ?UnrealScriptedSequence?, der unter Keypoint --> AIScript --> ScriptedSequence zu finden ist. Diese USS werden überall dort gesetzt, wo Bots verteidigen sollen; wichtig ist, dass sie entsprechend der später gewünschten Blickrichtung ausgerichtet werden. Die Eigenschaft Events --> Tag muss auf den gleichen Wert eingestellt werden, wie der, der im Game Objective angegeben wurde.



Jetzt funktioniert der Defense Point bereits, für eine optimale Bot-KI sind aber noch zwei weitere Einstellungen nötig.


Sniperpositionen

Soll der Verteidigungspunkt als Sniperposition dienen, so muss in der USS die Eigenschaft bSniping auf ?true? gesetzt werden. Zusätzlich kann unter WeaponPreference noch SniperRifle ausgewählt werden.

Prioritäten setzen

Wie auch im alten Unreal Tournament, können Defense Points in UT2003 Prioritäten erhalten. Sie bestimmen den Prozentsatz der Bots, die den jeweiligen Defense Point nutzen. Dafür müssen nur unter Priority unterschiedliche Werte gesetzt werden, je höher die Zahl, desto wichtiger der Verteidigungspunkt.


Copyright © 2000-2003, Jan "eGo" Urbansky
EGO-CREATIONS - Software Development
http://www.ego-creations.de