FACHHOCHSCHULE KÖLN Fußgänger in C.I.T.Y Analyse und Integration von Pfadfindung für Fußgänger in der virtuellen Stadt von C.I.T.Y. Hubert Grzeskowiak 16.02.2013 Diese Arbeit ist im Rahmen des Fachs „Entwicklungsprojekt Serious Games“ im Wintersemester 2012/2013 entstanden. Betreuer: Prof. Dr. Friedbert Jochum Beate Münster Dennis Buderus Marco Reitano Dieses Dokument beschreibt die Vorgehensweise, sowie Ergebnisse und Erfahrungen, die während der Arbeit von mir gemacht wurden. Der Schwerpunkt liegt darin, die Weiterarbeit an diesem Thema im Rahmen des C.I.T.Y. Projektes möglichst effizient zu gestalten. Es werden die wichtigsten Begriffe und Techniken erklärt, und erkannte „Stolperfallen“ aufgedeckt. Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 Inhaltsverzeichnis 1 Einführung ........................................................................................................................................ 2 2 Ziel dieser Arbeit .............................................................................................................................. 2 3 Analyse ............................................................................................................................................. 2 3.1 Begehbare Bereiche ................................................................................................................... 3 3.2 Wegfindungsalgorithmus .......................................................................................................... 4 4 Bibliotheken ..................................................................................................................................... 5 5 Implementierung .............................................................................................................................. 5 5.1 Einscannen von Bürgersteigen .................................................................................................. 5 5.2 Links/UserConnections ............................................................................................................. 6 5.3 Animationen .............................................................................................................................. 6 5.4 Ampeln ...................................................................................................................................... 6 5.5 Spawning ................................................................................................................................... 7 5.6 Skalierbarkeit............................................................................................................................. 9 6 Erweiterungsmöglichkeiten .............................................................................................................. 9 7 Resümee ......................................................................................................................................... 10 - 1 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 1 Einführung Seit einigen Jahren wird am Campus Gummersbach an einem Softwareprojekt namens C.I.T.Y gearbeitet. Es handelt sich dabei um eine virtuelle, realitätsnahe 3D Lernumgebung, die an echte urbane Orte erinnern soll. Sie soll Kindern und Jugendlichen beim Umgang mit Menschen, Straßenverkehr, Öffentlichen Verkehrsmitteln, Geschäften und anderen Einrichtungen helfen soll. Zum Zeitpunkt dieses Schreibens befindet sich das Projekt in einer frühen Entwicklungsphase und bietet einen kleinen nachgebauten Teil der Stadt Köln, sowie fahrende Autos und Straßenbahnen. Der Spieler bewegt in dieser Umgebung einen Avatar in der First-Person Ansicht und kann so auch mit der Umgebung interagieren. 2 Ziel dieser Arbeit In der 3D Stadt befinden sich bereits einige Passanten, die manuell an bestimmte Positionen gesetzt wurden und an dieser Stelle stehen oder eine einfache Animation abspielen (z. B. leichtes Wippen, Umsehen). Die Passanten sind allerdings nicht in der Lage ihre Position zu ändern bzw. sich abgesehen von den Animationen zu bewegen. Das Ziel dieser Arbeit ist eine Steigerung der Autonomie der Passanten in der virtuellen Stadt. Als erstes und wichtigstes Ziel wird dabei die selbstständige Bewegung der Passanten verstanden. Als Spieler soll man an allen üblichen Orten Passanten antreffen, die jeweils scheinbar ein eigenes Ziel verfolgen. Dadurch soll dem Spieler sugeriert werden, er befände sich in einer bevölkerten, lebendigen und dynamischen Stadt. Das hat einerseits den Vorteil, dass das Gesamterlebnis realitätsnäher wirkt, und andererseits legt diese Entwicklung den Grundstein für spätere Übungen zu menschlicher Interaktion. Verhaltensmuster werden nicht behandelt, sondern stellen eine mögliche Erweiterung des Themas dar. Es wird lediglich die Pfadfindung und Bewegung bearbeitet. 3 Analyse Aktuell verfügt das C.I.T.Y. Projekt über keinerlei Pfadfindung oder sonstige Techniken zur autonomen Bewegung von Passanten. Ein Pfadfindungssystem besteht für Fahrzeuge auf den Straßen, allerdings lässt sich dieses nicht auf Fußgänger anwenden, da Fußgänger sich nicht wie Autos in einer 2 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 Schlange entlang von „Schienen“ vorwärts bewegen. Außerdem basiert das Fahrzeug-System auf einem Straßen-Graphen, der für Bürgersteige nur teilweise und für sonstige begehbare Bereiche, z. B. Bahnstationen, gar nicht existiert. Die allgemein im Bereich der Spieleentwicklung und Simulation zur Verfügung stehenden Techniken zur Pfadfindung im 3D Raum (eng. Pathfinding) sind überschaubar. Sie unterscheiden sich im Grunde nur durch die Definition der begehbaren Bereiche und den verwendeten Algorithmus zur eigentlichen Wegfindung auf diesen begehbaren Bereichen. Im Kern jeder aktuell anwendbaren Lösung steckt ein Graph im Sinne der Graphentheorie. Dabei bietet jede Technik in variierendem Umfang den begehbaren Bereich als einen zyklischen, gewichteten und/oder gerichteten Graphen zu beschreiben. Dies erlaubt den Einsatz von Algorithmen zum Finden von kürzesten Wegen innerhalb des Graphen und somit auch auf dem 3D Mesh. 3.1 Begehbare Bereiche Der Computer kann bei 3D Geometrie von sich aus keinen Unterschied zwischen begehbaren Flächen, wie Bürgersteigen, Rasenflächen und Plätzen, und zwischen unpassierbarem Wasser, Graben, befahrenen Straßen oder gar Boden unter Gebäuden feststellen. Zur Führung der Passanten werden diese Informationen aber benötigt. Im Folgenden werden drei übliche Verfahren zur Ermittlung und Beschreibung der begehbaren Flächen vorgestellt. 3.1.1 Point Graph/Waypoints Bei dieser Technik wird in der 3D Szene ein Netz aus vielen Punkten/Knoten verlegt, die untereinander beliebig mit Linien/Kanten verbunden sein können. Sowohl die Knoten, wie auch die Kanten zeichnen den begehbaren Bereich aus. Die Entfernung zwischen zwei verbundenen Knoten wird der Kante als Gewichtung zugeschrieben. Problem bei dieser Technik ist der enorme Aufwand wegen der manuellen Platzierung der Punkte und Kanten, sowie starke Einschränkungen bei größeren Agentengruppen. Jeder Abbildung 1: Point Graph auf einer kleinen Dorf Szene (Quelle: Chris Kalani, http://www.ai-blog.net/archives/000152.html, abgerufen am 14.3.2013) Weg muss mit mehreren parallelen Pfaden versehen sein und diese müssen zwischendrin immer wieder verbunden sein, damit sich Fußgänger beispielsweise überholen können. 3 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 3.1.2 Grid Graph Bei dieser Technik wird ein Raster aus vielen Quadraten (manchmal auch Dreiecken oder Sechsecken) über die Szene gelegt. Das Raster besteht auch hier aus Knoten und Kanten. Bei jedem Knoten wird ein Strahl nach unten geworfen und wenn er mit keiner 3D Geometrie, als unbegehbar markierter- oder zu steiler Oberfläche kollidiert, wird er deaktiviert (aus dem Graphen entfernt). Bei diesem Graphen sind auch Abbildung 2: Ein Grid Graph (Quelle: Aron Granberg, http://arongranberg.com/astar/docs/class_pathfinding _1_1_grid_graph.php , abgerufen am 14.3.2013) Diagonalverbindungen möglich und bei großer Auflösung ist eine sehr genaue Abdeckung des begehbaren Bereiches möglich, wodurch sich schon ein Vorteil gegenüber Point Graphen herausstellt. Ein großer Nachteil dieser Technik ist das Fehlen der Möglichkeit für mehrere Etagen, da dieses Raster zweidimensional ist. So wären beispielsweise Tunnel oder überbedachte Gebäude nur mit mehreren Schichten von Rastern abdeckbar. 3.1.3 Navmesh Navmeshes (Navigation Mesh) werden in modernen 3D Spielen, vor allem da, wo freie Bewegung von NPCs wichtig ist, am häufigsten genutzt. Sie bieten den Algorithmen viel mehr Informationen, da in erster Linie nicht Punkte, sondern begehbare Polygone gespeichert werden. Diese können beliebig viele Seiten haben, müssen aber stets konvex sein. Durch das Mehr an Informationen ist es möglich mehrere Agenten nebeneinander zu gehen- oder sich gegenseitig überholen zu lassen. Die Abstraktion auf einen Graphen bei einem Navmesh kann auf mehrere Arten erfolgen, wobei die hier verwendete Methode jedes Polygon als einen Knoten und gemeinsame Seiten zu benachbarten Abbildung 3: Navmesh auf einer Dorf Szene (Quelle: Chris Kalani, http://www.aiblog.net/archives/000152.html, abgerufen am 14.3.2013) Polygonen als Kanten im Graphen definiert. Da in C.I.T.Y. ein großer Teil der Meshes ohnehin prozedural generiert wird, bietet sich diese Technik besonders an. 3.2 Wegfindungsalgorithmus Bei der Wegfindung gibt es aktuell zwei Ansätze, die oft auch gleichzeitig genutzt werden. Der erste Ansatz ist die Verwendung des A* Algorithmus. Mithilfe dieses aus der Graphentheorie bekannten Verfahrens lässt sich sehr performant der kürzeste Weg zwischen zwei Knoten innerhalb eines Graphen berechnen. Die Gewichtung der Kanten entspricht der Entfernung der Knoten voneinander 4 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 (Bei Navmeshes: Flächenmittelpunkte). Als Heuristik für den A* Algorithmus kann hier beispielsweise der Luftweg zum Ziel verwendet werden. Wenn nur die Draufsicht relevant ist, kann auch die Entfernung zum Ziel zum Quadrat verwendet werden, da so das Wurzelziehen entfällt und die Performanz steigt (vgl. Satz des Pythagoras). Damit lässt sich der Weg durch die verschiedenen Flächen berechnen. Für die konkrete Streckenführung innerhalb der einzelnen Flächen werden andere Algorithmen, wie zum Beispiel Bezier Kurven oder Splines verwendet (siehe hierzu "Modifier" aus der A* Pathfinding Project Bibliothek, allen voran „Funnel Modifier“). 4 Bibliotheken Nach einer gründlichen Marktanalyse im Bereich von Unity und Pfadfindung wurde "A* Pathfinding Project" (auch „Astar Pathfinding Project“) als zu verwendende Bibliothek gewählt. Diese bietet in der kostenlosen Version bereits die Abstraktion von Meshes zu Graphen, eine Implementierung des A* Algorithmus mit vielen Einstellungsmöglichkeiten, sowie visuelles Debugging. Zudem ist der Quellcode verfügbar. Die Projekt Website ist unter dem URI http://arongranberg.com/astar/ zu finden. Die Navmesh Werkzeuge aus Unity Pro sind nicht zu empfehlen, da damit eine Abhängigkeit von teuren Softwarelizenzen einhergeht, der Quellcode nicht einsehbar ist (bzw. extra gekauft werden muss) und weil es damit nicht möglich ist, Navmeshes während der Laufzeit zu verändern, was im späteren Projektverlauf mit hoher Wahrscheinlichkeit eine Anforderung darstelen wird. 5 Implementierung Die Programmierung der hier beschriebenen Bibliotheken und Schnipsel erfolgte vollständig in C#. Für genauere Erklärungen zu den einzelnen Klassen und Funktionen soll hier auf die Dokumentation innerhalb des Quellcodes verweisen. 5.1 Einscannen von Bürgersteigen Aktuell (WS 2012/2013) liegt dem abgegebenen Quellcode des Projektes eine Klasse zur einfachen Konvertierung der Bürgersteige aus C.I.T.Y in ein zusammenhängendes Mesh, das an die A*Pathfinding Bibliothek übergeben wird. Hierzu dient die Datei BCRNNavmesh.cs. (Der Name steht für Blended Cities Road Network Navmesh.) Die Klasse enthält Methoden zum Hinzufügen, Ersetzen 5 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 und Generieren eines Navmeshes. Beim Benutzen des Inspectors ist zu beachten, dass die Navmeshes wahlweise im Editor oder beim Starten des Spiels erstellt werden können. Die Erstellung im Editor verkürzt die Startzeit, sollte aber eher nur zu Testzwecken eingesetzt werden. Das automatische Scannen seitens der "Astar Path" Komponente ist bei Benutzung des Straßennetz-Scanners im Astar Path Inspektor abzustellen. 5.2 Links/UserConnections Es können auch Links (sog. UserConnections) zwischen Knoten, beispielsweise bei Kreuzungen gesetzt werden. Dadurch ist es den Passanten möglich die Straßen zu passieren, auch wenn sie dort nicht auf einem Navmesh stehen. Die Meshes für die Straßen werden nicht in das Navmesh eingespeist, um die Größe der Graphen möglichst klein und das Fehlerpotenzial gering zu halten. Im Abbildung 4: Vier generierte User Connections, die die Überquerung der Straße ermöglichen entsprechenden Inspektor können die zu berücksichtigenden Kreuzungsarten (z.B. T-Kreuzung, Kurve etc.) eingestellt werden. Die Links können auch manuell gesetzt werden. Damit lassen sich auch externe Navmeshes von Modellen wie Plätzen, U-Bahn Stationen usw. in das Bürgersteige Navmesh integrieren. Für weitere Informationen hierzu ist in der A* Pathfinding Project Dokumentation nachzuschlagen. 5.3 Animationen Mit der Klasse HumanWalkerAnimator.cs und dem Prefab „Navmesh Agent“ wurde eine Basis für universell einsetzbare Passanten geschaffen. Diese verfügen unter Anderen über die Möglichkeit jeweils eigene Höchstgeschwindigkeiten zu definieren. (Die tatsächliche Geschwindigkeit hängt vom Character Controller ab, da dieser beispielsweise in Kurven oder beim Erreichen des Ziels abbremst.) Je nach der aktuellen Geschwindigkeit lassen sich auch verschiedene Animationen abspielen. Im Prefab besitzt der Bauarbeiter (Platzhalter) drei Animationen: stehen, gehen und laufen. Über den Inspektor lassen sich diese bei anderen Modellen je nach Geschwindigkeit anpassen, sodass ab einer bestimmten Geschwindigkeit vom Gehen ins Laufen gewechselt wird. Auch die Abspielgeschwindigkeit der jeweiligen Animationen wird geregelt, sodass sich beim Laufen beispielsweise auch innerhalb der einen Animation Unterschiede je nach Geschwindigkeit ergeben. 5.4 Ampeln Während der Implementierung wurde der Versuch unternommen, ein prototypisches Ampelsystem für die Fußgänger zu bauen. Die Idee war, die Passanten, die eine Straße überqueren wollten so lange 6 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 aufzuhalten, bis der Übergang freigeschaltet wurde. Die Pfadfindung würde davon nur wenig beeinflusst werden. Es müsste höchstens eine etwas höhere Gewichtung auf die Kante gelegt werden, die den Straßenübergang darstellt. Probleme ergeben sich bei dem Feststellen, ob ein Fußgänger "vor hat" eine Straße zu überqueren, und ob er gerade an einem Ende dieses Übergangs steht. Die Pfadfindung in der verwendeten Bibliothek ist zur Steigerung der Performanz und zur Zieländerung während der Laufzeit sehr dynamisch aufgebaut. Der aktuelle Pfad enthält zu jedem Zeitpunkt nur die absolut notwendigen Daten zur Bewegung des Passanten. Dabei wird der aktuell iterierte Knoten oft noch vor dem Betreten dieses aus der Liste der noch zu begehenden Knoten gelöscht. Ein weiteres Problem bei dem Vorhaben ist, dass die Passanten nicht irgendwo auf der Fläche beim Straßenübergang anhalten sollten. Handelt es sich beispielsweise um ein sehr großes Dreieck, so sollte der Passant dennoch möglichst nahe an den Straßenrand gehen und sich zur anderen Seite der Straße drehen. Sehr kleine Dreiecke wiederum könnten den Nebeneffekt haben, dass der Passant erst auf der Straße stehenbleibt oder dass das Dreieck in der Pfadfindung ganz weggelassen wird, sobald sich der nächste Knoten/Dreieck in einer gewissen Distanz zum Fußgänger befindet. (Wenn sich der übernächste Knoten aus der Liste der zu begehenden Knoten in einem bestimmten Radius befindet, wird der planmäßig nächste Knoten übersprungen. Dadurch wird der Pfad vereinfacht.) Zu diesem Vorhaben liegen einige Klassen vor, in denen sich Bruchstücke von funktionierendem Code befinden. Sie wurden allerdings nicht weiterentwickelt und dienen z. Z. als reine Hilfe bzw. Nachschlagewerk für Ideen. 5.5 Spawning Zur Zeit der Abgabe müssen die Passanten (im Projekt auch "Navmesh Agents" genannt) manuell im Editor platziert und ihre Ziele jeweils im Inspektor eingestellt werden. Es wurde ein Versuch unternommen, die Passanten anhand bestimmter Kriterien in der Stadt zufällig auftauchen zu lassen, wie man es von vielen Spielen wie GTA, Driver etc. kennt. Das Spawnen (engl. für "hervorbringen") umfasst mehrere Kriterien, anhand derer Passanten erscheinen dürfen: 1. Die Passanten sollten beim Spawnen nicht vom Spieler gesehen werden können. 2. Die Streuung sollte unabhängig von der Beschaffenheit des Navmeshes geschehen. Das heißt, die Anzahl oder Fläche der einzelnen Polygone im Navmesh sollten keine Auswirkung auf die Verteilung der Fußgänger haben. 3. Es sollte sich zu jedem Zeitpunkt nur eine bestimmte Anzahl (min/max) an Fußgängern um den Spieler herum befinden. 7 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 Der erste Punkt ist teilweise von Unity innerhalb der Methode Renderer.isVisible1 bereits vorhanden. Wie die Dokumentation aber auch erwähnt, gilt ein Modell auch dann als sichtbar, wenn er für Schattenwurf verwendet wird. Das genaue Verhalten bei Occlusion Culling2 in Unity ist leider nicht dokumentiert. Die Streuung wurde in einem ersten Versuch wie folgt angegangen: für jedes Dreieck des Navmeshes (das Navmesh besteht genaugenommen nur aus Dreiecken) wird dessen Oberfläche als XZ-Projektion berechnet. Die Kürzung der Y-Dimension (oben/unten) ist damit begründet, dass auf einer Schrägen durch die größere Oberfläche nicht mehr Menschen stehen können als auf einer ebenen Fläche. Und auf einem senkrechten Dreieck, das genaugenommen sowieso nicht in einem Navmesh vorkommen sollte, können keine Menschen stehen, da sie parallel zur globalen Y Achse (aufrecht) platziert werden. Durch Addition wird die gesamte Oberfläche des Navmeshes errechnet und die einzelnen Flächen durch diese geteilt, sodass sich für jede Fläche eine Zahl ergibt, die den Anteil an der Gesamtfläche beschreibt. Würde das Navmesh beispielsweise aus zehn gleichgroßen Dreiecken bestehen, wären die Anteile jeweils 0,1. Die Berechnung der Anteile am Ganzen ist notwendig für ein gleichmäßiges Spawnen. Sind die Anteile der Dreiecke am Ganzen bekannt, kann nun mithilfe einer Zufallszahl zwischen 0 und 1, sowie Addition der Flächen bis zur Erreichung dieser Zufallszahl eine zufällige Fläche ausgewählt werden, wobei größere Flächen hierbei automatisch größere Wahrscheinlichkeiten bedeuten. (Dem Beispiel von zehn gleichgroßen Flächen folgend: Zufallszahl ist 0.674. Die Dreiecke werden so lange addiert, bis die Summe 0.674 erreicht oder übersteigt. Das siebte Dreieck in der Liste würde also ausgewählt werden.) Mit diesem Verfahren lassen sich so viele Dreiecke ermitteln, wie Passanten zur Zeit benötigt werden. Eine zufällige Position innerhalb des jeweiligen Dreiecks lässt sich mittels eines Zufallspunktes in einem Einheitsquadrat bestimmen, der auf das Dreieck mittels Multiplikation mit den aufspannenden Vektoren des Dreiecks projiziert wird. Eine Multiplikation von jeweils 0..1 mit jedem der beiden aufspannenden Vektoren führt zu einem Zufallspunkt innerhalb des Dreiecks, wenn beide Zufallswerte addiert höchstens 1 ergeben.3 Leider hat diese Methode einen vorher unterschätzten Nachteil: die Berechnungen dauern sehr lange, wodurch Neuberechnung während der Laufzeit (beispielsweise beim Ändern der Navmeshes), oder Debugging fast unmöglich werden. Auch das Starten des Spiels wird dadurch um einige Minuten 1 API Referenz zu Renderer.isVisible: http://docs.unity3d.com/Documentation/ScriptReference/RendererisVisible.html 2 Occlusion Culling bezeichnet eine Optimierungstechnik beim Rendern, bei der verdeckte Polygone bzw. Objekte bestimmt und für den weiteren Rendering Prozess ignoriert werden. 3 Dieser Algorithmus ist von Steven Pigeon im Detail erklärt auf http://hbfs.wordpress.com/2010/10/05/randompoints-in-a-triangle-generating-random-sequences-ii/ (abgerufen am 10.1.2013). 8 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 verzögert. Der Code ist größtenteils fertig und ist in der Datei NavmeshAgentSpawner.cs zu finden. Die Fertigstellung wurde aufgrund der schlechten Performance aufgegeben. Für die Zukunft empfiehlt sich eher das Spawnen an bestimmten Punkten, die manuell oder automatisch gesetzt werden. Das könnten beispielsweise Eingänge von Häusern, Sackgassen oder Ähnliches sein 5.6 Skalierbarkeit Beim Versuch, den vorhandenen Code in aktuelle Versionen von C.I.T.Y einzubinden, wurde entdeckt, dass die Gesamtheit der Bürgersteige nicht zu einem zusammenhängenden Mesh verbunden werden kann. Die Anzahl der Punkte/Vertices übersteigt Unitys Kapazitäten. Beim Übertragen des Prototyps in C.I.T.Y ist die Generierung vom Navmesh also auf einen kleineren Bereich ,z.B. um den Spieleravatar herum, zu beschränken. Denkbar ist auch die Unterteilung der Stadt in mehrere Sektoren, bei denen jedes ein eigenes Navmesh erhält. Je nach dem, wo sich der Spieler befindet, müsste das genutzte Navmesh dann geändert werden. Die Fußgänger wären dabei leider auch auf jeweils bestimmte Bereiche beschränkt. In diesem Aspekt ist weitere Nachforschung vonnöten. 6 Erweiterungsmöglichkeiten Neben den obengenannten Punkten gibt es diverse weitere potenzielle Erweiterungen. Nicht weiter verfolgt wurde beispielsweise Gruppenverhalten oder das gezielte Ausweichen vor anderen Verkehrsteilnehmern. Zum Zeitpunkt dieses Schreibens wurde in der A* Pathfinding Bibliothek eine erste Version eines Algorithmus eingeführt, mit der Lokales Ausweichen (engl. Local Avoidance) ermöglicht wird. Auch die Navmesh Generierung enthält noch viel Verbesserungspotential, wie beispielsweise der Export von Navmeshes oder dynamische boolsche Operationen, die sich besonders zum Ausschneiden von Löchern aus dem Navmesh eignen würden, wo Objekte auf dem Bürgersteig platziert wurden. Die Bewegung von Passanten bildet im C.I.T.Y Projekt nur einen kleinen Teil des Spektrums menschlicher Aktionen ab. Für realistischeres Verhalten ist eine komplexere KI unerlässlich. Ein endlicher Automat (eng. Finite State Machine, kurz FSM) ist die häufigste in modernen Spielen anzutreffende Variante einfacher KI für Agenten mit mehreren fest definierten Aktionen und Verhaltensweisen. Speziell für Unity bieten sich hier auch diverse Bibliotheken und visuelle Editoren von Drittanbietern an. 9 Fußgänger in C.I.T.Y - Hubert Grzeskowiak 16.02.2013 7 Resümee Das gesetzte Ziel der Arbeit wurde nicht ganz erreicht, aber es wurde viel Analyse und Prototypenentwicklung betrieben. Auf diese Arbeit kann in den folgenden Jahren hoffentlich zurückgegriffen werden, wenn das Thema weiter bearbeitet werden sollte. Die selbstständige Arbeit an einem ambitionierten Projekt, das sich mit Spieleentwicklung, Simulation, Künstlicher Intelligenz und sogar sozio-pädagogischen Themen beschäftigt, brachte mir persönlich einen enormen Erfahrungszuwachs. Die Betreuer waren sehr freundlich und hilfsbereit, und standen mir immer mit qualifizierten Ratschlägen zur Seite. Die regelmäßigen Audits, sowie konstruktive Kritik sorgten für anhaltende Motivation und halfen beim Planen des Vorgehens. Auch die Einarbeitung in die populären Technologien Unity3D und C#, sowie in die A*Pathfinding Bibliothek, war jede Stunde wert und hat mir neue Perspektiven und Projektmöglichkeiten eröffnet. 10