Jenna Felton
Superstar
Pathfinding: Biene, Tutorial
Hallo, da ich schon soetwas quasi angekündigt habe, möchte ich hier eine Art Tutorial für Pathfinding machen, in dem eine Biene, angetrieben mit dem KI den Weg von Blume zur Blume finden wird. Die KI gehört zur Technologie von Pathfinding, die sich zur Zeit am Ende der Entwicklungsphase befindet. Viel wird sich dabei nicht mehr ändern, so dass man damit schon spielen kann.
Vielleicht (als Vorschlag) sollte man deshalb einen Unterforum in Bauen / Bauen und Basteln einrichten, und den Thread, sofern genug informativ dorthin verschieben. Pathfinding betrifft nicht nur das Scripten, daher passt ins Scripterforum auch nicht vollständig.
Warum die Biene. Zum einen weil ich die Tierchen mag, zum anderen schweben sie, das ist schon etwas anderes/neues als die rollende Steine der Linden Realms. Das macht sie zwar immer noch einfach zu realisieren, die Pfadfinder-KI benötigt eigentlich wenige und einfache Befehle, um komplexe Vorgänge auszulösen. Das Schweben macht sie aber etwas komplizierter und anspruchsvoller, so dass man damit schon die Technik gut kenenlernen kann. Die Biene wird aber neben dem Pfadfindercode auch einiges mehr enthalten.
Ich mache aber schrittweise, weil ich selber erst am Anfang bin, daher wird der Tread einige Tage oder Wochen dauern. Man kann hier aber nicht nur lesen, sondern posten und diskutieren. Zuerst aber das Teil 0, wo ich Links einstelle was man so lesen sollte zum Thema und ich gebe eine kurze Beschreibung für die benutzte Befehle, damit man die Scripte leichter verstehen kann. Ich werde aber nicht die ganze Wiki zitieren sondern nur das erklären was ich nutzen will. Daher wird der Post hier immer wieder erweitert.
Pathfinding wird öft als "PF" abgekürzt. Ist sonst ein Zungerbrecher, daher mache ich so auch ab und zu.
Teil 0
Zunächst einige Links.
Das Pathfinding beginnt in der Wiki hier: Pathfinding in Second Life. Allerdings finde ich als Einstieg wesentlich besser diese Seite: Good Building Practices, diese wird als eine Art Dokumentation zum Bauen allgemein und Pathfinding fungieren, und schon jetzt sehr gut ausgebaut.
Pathfinding ist eine Technologie, die mittels einer KI ermöglicht, den sogenannten Characters (Spielfiguren) einen Weg in der gegebenen Umgebung zu finden. Die Umgebung ist dabei die Navmesh, also eine Art Karte, die von der Topologie der Sim und Gegenstände daraus berechnet wird. Die Berechnung führt die Sim selbst aus, die Benutzer bekommen davon aber nur mit wenn sie mit einem Viewer unterwegs sind, der die Pfadfindererweiterung enthällt. Dann hat die Regionleiste oben einen Symbol, der Angibt, ob Pathfindung in der Region aktiviert ist und ob die Navmesh aktuell ist. Ist sie nicht aktuell, zeigt der Viewer auch einen Button unten, mit dem man diese Berechung starten kann (das dauert, daher wird nicht ständig durchgeführt, wenn sich die Hindernisse auf der Sim verschieben)
Ansonsten wird die Pathfindungs-Operationen mittels der LSL Skripte ausgeöst, daher reicht für das Tutorial hier jeder Viewer. Wer Firestorm mag, oder Singularity, oder..., kann sicher dabei bleiben. Nur wer die Pfade sehen möchte, welche die die KI berechnet hat, oder wissen möchte, ob PF auf der Region aktiv ist, der braucht den Pathfinderviewer. Hier kann man ihn herunterladen: Pathfinding
Inzwischen ist auch die Betaversion des SL Viewers erschienen, die unter anderem den Viewercode für Pathfinding enthällt (Version 3.4.0-262596.)
Zu holen auf der Downloadseite. Wesentlich ausführlicher hat Maddy darüber gebloggt.
So, inzwischen ist das Pathfinding auch im Maingrid aktiv, aber nicht überall eingeschaltet. Im Betagrid, wo ich die meiste Tests gemacht habe, fand ich keine Region mit aktiven PF, außer der vorgeschlagenen PathTest1, PathTest2, PathTest3 und PathTest4.
Funktionen
llCreateCharacter
Erstellt den Character aus einem Objekt der den Skript enthällt. Bevor ein Objekt die PF-Funktionen nutzen kann, muss es ein Character werden, also die Spielfigur. Diese Funktion ist also die erste, die aufgerufen wird und werden muss. Die Character-Eigenschaft ist eine Eigenschaft des Objekts und des Skripts. Löscht man den Skript, bleibt das Objekt der Character bis die Funktion llDeleteCharacter aufgerufen wurde. Die llCreateCharacter Funktion wird mit einer Liste von Optionen erstellt, die das Verhalten des Characters angeben:
Die Werte haben Voreinstellungen so dass man die Liste sogar leer lassen kann.
llUpdateCharacter
Damit lassen sich die Charactereigenschaften dynamisch ändern. Die Funktion erwartet eine Liste von Werten, die zu ändern sind.
llNavigateTo
Diese Funktion erwartet einen Vektor und Liste mit Optionen. Der Vector gibt die (regionale) Koordinate des Punktes, zu dem sich der Char begeben soll. Als Option wird derzeit nur die FORCE_DIRECT_PATH unterstützt. Ist die gesetzt, nimmt der Char einen direkten Weg, und keinen berechneten. Das könnte etwa helfen wenn der Char in einer Falle steckt oder so.
llExecCharacterCmd
Der Character soll einen Befehl ausführen, der an die Funktion übergeben wird. Etwa in die Luft springen, oder anhalten (werden wir nutzen.)
path_update
Dieses Ereignis wird ausgelöst, wenn sich am Pfad etwas ändert, etwa wenn der Char das Ziel erreicht hat oder der Pfad plötzlich blokiert ist. Dann kann man den Nächsten Punkt ansteuern.
So, im moment reicht das für den Teil 0. Im nächsten Teil geht aber zur Sache
wenn ich Bilder bearbeitet und hochgeladen habe.
LG
Hallo, da ich schon soetwas quasi angekündigt habe, möchte ich hier eine Art Tutorial für Pathfinding machen, in dem eine Biene, angetrieben mit dem KI den Weg von Blume zur Blume finden wird. Die KI gehört zur Technologie von Pathfinding, die sich zur Zeit am Ende der Entwicklungsphase befindet. Viel wird sich dabei nicht mehr ändern, so dass man damit schon spielen kann.
Vielleicht (als Vorschlag) sollte man deshalb einen Unterforum in Bauen / Bauen und Basteln einrichten, und den Thread, sofern genug informativ dorthin verschieben. Pathfinding betrifft nicht nur das Scripten, daher passt ins Scripterforum auch nicht vollständig.
Warum die Biene. Zum einen weil ich die Tierchen mag, zum anderen schweben sie, das ist schon etwas anderes/neues als die rollende Steine der Linden Realms. Das macht sie zwar immer noch einfach zu realisieren, die Pfadfinder-KI benötigt eigentlich wenige und einfache Befehle, um komplexe Vorgänge auszulösen. Das Schweben macht sie aber etwas komplizierter und anspruchsvoller, so dass man damit schon die Technik gut kenenlernen kann. Die Biene wird aber neben dem Pfadfindercode auch einiges mehr enthalten.
Ich mache aber schrittweise, weil ich selber erst am Anfang bin, daher wird der Tread einige Tage oder Wochen dauern. Man kann hier aber nicht nur lesen, sondern posten und diskutieren. Zuerst aber das Teil 0, wo ich Links einstelle was man so lesen sollte zum Thema und ich gebe eine kurze Beschreibung für die benutzte Befehle, damit man die Scripte leichter verstehen kann. Ich werde aber nicht die ganze Wiki zitieren sondern nur das erklären was ich nutzen will. Daher wird der Post hier immer wieder erweitert.
Pathfinding wird öft als "PF" abgekürzt. Ist sonst ein Zungerbrecher, daher mache ich so auch ab und zu.
Teil 0
Zunächst einige Links.
Das Pathfinding beginnt in der Wiki hier: Pathfinding in Second Life. Allerdings finde ich als Einstieg wesentlich besser diese Seite: Good Building Practices, diese wird als eine Art Dokumentation zum Bauen allgemein und Pathfinding fungieren, und schon jetzt sehr gut ausgebaut.
Pathfinding ist eine Technologie, die mittels einer KI ermöglicht, den sogenannten Characters (Spielfiguren) einen Weg in der gegebenen Umgebung zu finden. Die Umgebung ist dabei die Navmesh, also eine Art Karte, die von der Topologie der Sim und Gegenstände daraus berechnet wird. Die Berechnung führt die Sim selbst aus, die Benutzer bekommen davon aber nur mit wenn sie mit einem Viewer unterwegs sind, der die Pfadfindererweiterung enthällt. Dann hat die Regionleiste oben einen Symbol, der Angibt, ob Pathfindung in der Region aktiviert ist und ob die Navmesh aktuell ist. Ist sie nicht aktuell, zeigt der Viewer auch einen Button unten, mit dem man diese Berechung starten kann (das dauert, daher wird nicht ständig durchgeführt, wenn sich die Hindernisse auf der Sim verschieben)
Ansonsten wird die Pathfindungs-Operationen mittels der LSL Skripte ausgeöst, daher reicht für das Tutorial hier jeder Viewer. Wer Firestorm mag, oder Singularity, oder..., kann sicher dabei bleiben. Nur wer die Pfade sehen möchte, welche die die KI berechnet hat, oder wissen möchte, ob PF auf der Region aktiv ist, der braucht den Pathfinderviewer. Hier kann man ihn herunterladen: Pathfinding
Inzwischen ist auch die Betaversion des SL Viewers erschienen, die unter anderem den Viewercode für Pathfinding enthällt (Version 3.4.0-262596.)
Zu holen auf der Downloadseite. Wesentlich ausführlicher hat Maddy darüber gebloggt.
So, inzwischen ist das Pathfinding auch im Maingrid aktiv, aber nicht überall eingeschaltet. Im Betagrid, wo ich die meiste Tests gemacht habe, fand ich keine Region mit aktiven PF, außer der vorgeschlagenen PathTest1, PathTest2, PathTest3 und PathTest4.
Funktionen
llCreateCharacter
Erstellt den Character aus einem Objekt der den Skript enthällt. Bevor ein Objekt die PF-Funktionen nutzen kann, muss es ein Character werden, also die Spielfigur. Diese Funktion ist also die erste, die aufgerufen wird und werden muss. Die Character-Eigenschaft ist eine Eigenschaft des Objekts und des Skripts. Löscht man den Skript, bleibt das Objekt der Character bis die Funktion llDeleteCharacter aufgerufen wurde. Die llCreateCharacter Funktion wird mit einer Liste von Optionen erstellt, die das Verhalten des Characters angeben:
- CHARACTER_DESIRED_SPEED - Geschwindigkeit mit der sich der Char normal bewegen sollte.
- CHARACTER_MAX_SPEED - Höchstgeschwindigkeit für das Character
- CHARACTER_RADIUS - Radius der Kollisionskapsule die den Character einschliest: Die Kapsule hat für die Sim die Form eines Zylinders mit Halbkugeln an den Seiten.
- CHARACTER_LENGTH - Länge des Kollisionskapsule.
- CHARACTER_ORIENTATION - Ist die Kapsule vertikal oder horizontal?
- TRAVERSAL_TYPE - Korrigiert die Geschwindigkeit an den Orten, die nicht 100% begehbar sind (Begehbarkeit wird bei der Einstellung der Umgebung für Charactertypen A bis D eingetragen)
- CHARACTER_TYPE - Bestimmt welches Typ ist der Char, A bis D oder keines (voreinstellung)
- CHARACTER_AVOIDANCE_MODE - Soll der Char andere Chars und Hindernisse ausweichen?
- CHARACTER_MAX_ACCEL, CHARACTER_MAX_DECEL - wie schnell wird der Char beschläunigen oder bremsen.
- CHARACTER_DESIRED_TURN_SPEED - Geschwindigkeit an den Kurven.
- CHARACTER_MAX_TURN_RADIUS - Radius der Kurven.
Die Werte haben Voreinstellungen so dass man die Liste sogar leer lassen kann.
llUpdateCharacter
Damit lassen sich die Charactereigenschaften dynamisch ändern. Die Funktion erwartet eine Liste von Werten, die zu ändern sind.
llNavigateTo
Diese Funktion erwartet einen Vektor und Liste mit Optionen. Der Vector gibt die (regionale) Koordinate des Punktes, zu dem sich der Char begeben soll. Als Option wird derzeit nur die FORCE_DIRECT_PATH unterstützt. Ist die gesetzt, nimmt der Char einen direkten Weg, und keinen berechneten. Das könnte etwa helfen wenn der Char in einer Falle steckt oder so.
llExecCharacterCmd
Der Character soll einen Befehl ausführen, der an die Funktion übergeben wird. Etwa in die Luft springen, oder anhalten (werden wir nutzen.)
path_update
Dieses Ereignis wird ausgelöst, wenn sich am Pfad etwas ändert, etwa wenn der Char das Ziel erreicht hat oder der Pfad plötzlich blokiert ist. Dann kann man den Nächsten Punkt ansteuern.
So, im moment reicht das für den Teil 0. Im nächsten Teil geht aber zur Sache
LG
Zuletzt bearbeitet: