My untitled 3D prototype was a project with the aim of learning 3D game development within the Unity Game Engine. The concept was a simple clone of the game Risk of Rain 2 by Hopoo Games, however was never fully realized due to my inability to create 3D assets and scope creep. As per the game development lifecycle, some projects pass the prototype stage and most don't - this was one that didn't.
Majority of the work done in this prototype is systemic: AI Behaviors, Procedural Generation, Coding Shaders & VFX Graphs, as well as Editor Tooling. Below is a showcase of them.
Here's a quick overview of what Utility Ai is: Utility Ai is bag of possibilities that an Ai Agent can choose from. Each possibility is scored based on predefined conditions on the world they are in. The highest scoring possibility is then chosen.
I chose Utility Ai as it provides fine grained control of the scoring system (through value curves) and emergent behaviors whilst remaining simple and efficient by being statically typed. I chose not to go with Behaviour trees as they are often times overly complex with node relations that create massive dependency chains as well as riddled with possible undefined behavior and performance problems due to heavy usage of blackboard data structures and key hashing.
AI Behavioral Agents were split into two systems: Actions and States. The Action agent component handles one-shot actions an AI could choose: Attack, Heal, Interact, Jump, etc. The State agent component handles the actual behavior that an AI Agent would exhibit: Move To Target, Circle Target, Flee from Target, Perform Idle Pathing, etc.
The toon shader is an unlit shader comprising of custom lighting calculations to achieve the desired look. Unlike many tutorials found on the internet, my solution reacts to dynamic lighting from multiple sources, colours, and intensities. It is mostly written in HLSL and used some features of shader graph for ease of use.
The custom splat map shader for the terrain uses a custom texture 2D editor plugin asset creator. It is a simple shader that takes in a splat map texture and a texture 2D array that maps to the texture. It is mostly written in HLSL and used some features of shader graph for ease of use.
A hybrid solution, combining Unity 6 NavMesh and my custom movement system. The in-built NavMesh components were used only pathfinding to drive the AI agents in a desired direction, whilst my custom movement system performed all logic required to actually get to said position. This not only allowed for a fine grained control over the agents movement but also the ability to apply forces onto an agent using Unity 6 NavMesh (which would be impossible with the stock solution).
Using Unity 6 NavMesh system, I was able to extract points along a baked mesh by averaging out the corner vertices of a given mesh. These points can then be used as a sample space for procedural placement of chests, items, enemies, etc.
This project heavily uses object pooling as well as the "bootstrap" pattern for manager game objects.
I do not claim to own or have created the following creative works used in this project or tutorials followed.