October 2017 to June 2018 school project Unity (C#) Narrative document
As Artémidore, the player embodies a small crab in the search of his disappeared friend and parental figure : a gigantic Hermit Crab. This journey leads him inside the empty shell of his friend where he discovers a confusing oniric world representing his travel through loss and self reconstruction.
This adventure game has the particularity to feature a world without up or down direction, therefore the player can only move by walking on surfaces, regardless of its orientation. They can only leave a surface for another by diving in a water current and grabbing the next surface.
We worked as a 6 people team and I was reponsible of programming as well as project management, planning for our school schedule which included several milestones and presentations. Here is a detail of my main programming tasks :
Player controller : Our 3rd person controller allows the player to walk on any surface regardless of common gravity. This feature was quite a challenge and I managed to orient and move the character smoothly according to the surface's normal by averaging the normal from several raycasts and using vectorial maths to find the correct direction and rotation.
Pathfinding : Handling the navigation of our swimming enemy was a big problemtatic : since it needed to move in 3 dimensions, using Unity's NavMesh was not an option. After some research I ended up implementing the A* algorithm on a three dimensional grid with heap optimization.
Enemy AI : Our enemy AI having quite simple behaviours, Finite State Machine was the most suited and efficient technic to implement. I used Scriptable Objects for state transitions and actions, which had the advantage of letting us easily construct new states by combining them. The AI uses the A* algorithm for navigation.
Game mechanics : I was also in charge of developing the main game mechanics : swimming in water currents and grabbing seaweed for camouflage. The water currents required the most work as I implemented a transition to an alternative way of controlling the character when swimming inside them. Each current is a spline created from the waypoints placed by the level designer and I worked with our game artists in order to generate meshes following that spline's shape.