Spirit Guardian

Spirit Guardian is a web-based 3D third-person shooter built with Unity WebGL. The gameplay centers on fluid player movement, shooting mechanics, and enemy interactions within a forest park environment. The player’s primary objective is to rescue lost spirits scattered around the area while combating sci-fi robot enemies that have invaded this natural setting.

Players must quickly collect as many spirits as possible under time pressure while defending against robotic opponents. Ammo drops and resource management add a strategic element, requiring players to balance accurate shooting with tactical positioning. The game emphasises responsive combat, quick decision-making, and adaptability, delivering a focused, engaging challenge.
Check out the project online or on GitHub.
Concept Development
I began by outlining the core mechanics I wanted in my third-person shooter: dynamic player movement, engaging shooting mechanics, and challenging enemy interactions. Initially, I thought of several themes but eventually decided on a natural forest park setting contrasted by robotic sci-fi enemies. My main idea was to create tension and urgency by tasking the player with rescuing spirits within a limited timeframe, while actively fighting off enemy robots.

Prototyping and Mechanics
I started developing prototypes in Unity, focusing first on player movement and shooting mechanics. Once basic interactions felt intuitive, I shifted to designing enemy behaviour. At first, I coded the enemy using the Unity AI system and by using Nav Mesh agent. The results were decent but buggy; enemies occasionally moved unpredictably or shifted to random locations after colliding with the player. To resolve these issues, I learned about State Machines and implemented them into my enemy controllers. This allowed me to create clearly defined states – idle, chase, attack, and retreat – resulting in consistent, predictable enemy behaviour and significantly improved game stability.
Additionally, I created a weapon manager system enabling players to switch quickly between multiple weapons, a timer system to enhance urgency, and a health system to manage player survivability.




Level Design and Visuals
After the core gameplay elements were implemented, I manually created terrain within Unity instead of relying on low-poly asset packs. This provided greater flexibility and control, allowing me to craft a natural, immersive forest park environment tailored to gameplay needs. I utilized Unity’s Universal Render Pipeline (URP) to optimize visuals and performance, and carefully baked lighting into the scene for realistic shadows and improved frame rates.
I strategically placed ammo drops, spirit spawn, and enemy spawn points to encourage tactical movement and gameplay decisions without requiring extensive exploration. I also imported several environment models from the Unity Asset Store, such as trees, rocks, and various foliage assets. These helped enhance the overall look and detail of the forest environment, blending naturally with the terrain I’d created manually.


Iteration and Refinement
Throughout development, regular iteration was essential. Feedback from playtesting prompted adjustments in enemy state transitions, weapon balancing, and health management. The timer system underwent careful tuning to ensure gameplay urgency without overwhelming players. Lighting, terrain details, and resource placements were continuously refined, ultimately delivering a cohesive and engaging experience aligned with my original vision.
