Project Overview
This project was part of a university course where we, as a group, were given a barebone 2D C# game engine and were tasked with adding features to the engine and producing a basic demo game to showcase the features that were added to the engine. The two major features I worked on for this game engine were related to game AI. I implemented an inheritance-based behaviour tree system that could be easily inherited from to create custom behaviour nodes and the final functioning tree. However, the engine had minimal functionality, and systems to act on an NPC were limited. To resolve this, I also implemented a pathfinding system that relied on a 2D NevMesh from scratch.
Behaviour Tree
I will not go in-depth into the design and implementation of the behaviour tree, as it is roughly the same as the implementation used in the Anomaly Cleanup Squad project. The noticeable differences are that the functionalities that relied on Unity systems have been reworked or removed, and the blackboard no longer uses serializing as it is no longer necessary for the editor. The same issue persists in this implementation that was initially present in the Unity implementation, which is that initializing the behaviour trees from code is a very tedious and bug-prone process and makes debugging difficult too.
Unfortunately, implementing an entire editor from scratch was significantly out of scope for this project, so an in-engine editor with debugging capabilities was not an option. However, I came up with a way to make designing the behaviour tree more manageable by using pre-existing online tools. Draw.io is an online tool that can be used to create flowcharts, which can then be exported as XML files. To simplify designing the behaviour trees, I implemented an XML import to the engine, which can read the specific structure from this website's export and convert it into behaviour trees. It uses name matching between the flowchart and existing node classes to decode the flowchart hierarchy to an initialized behaviour tree. An example of such a behaviour tree on Draw.io can be seen here:
Navigation Mesh
WIP
Path Finding
WIP
Tools Used
See More
Please note that the code in this repository is a mere showcase of my implementations. It does not include the actual engine, and thus is not executable.
Github Repository