For my last project, I took the opportunity to learn Unity through prototyping a simple 3d local-multiplayer game.
In the game, each player controls a ‘Shepherd’. The objective of the game is to eliminate all of the enemies ‘vassals’ which are a herd of small soldiers. The only control the shepherd has over the vassals is to toggle between having them follow their shepherd, or seek out and attack the nearest enemy vassal.
This makes the gameplay tactics about positioning, choosing the right time to attack, and using the environment to their advantage. If your units attack as a group, or at a choke point, they will eliminate the enemy with ease.
Because I had never worked with unity before, the vast majority of this 2 week project was spent familiarizing myself with unity, C#, and how to use many of the built-in functionality that unity provides. This included:
• Nav Meshes & Nav Mesh Agents to control the flocking/pathfinding behavior of the AI vassals.
• Delegates, Events, and Event Subscription to allow GameObjects to relay their position / health / etc. to other GameObjects
• Instantiation, Parent/Child relationships, and how to safely destroy GameObjects to allow for modular setup/reset of the level
• Camera Viewports and how to setup splitscreen for multiplayer
• Layers, Tagging, and physics interactions / collisions
The scripts I wrote for unit control, health, combat interactions, among other things are on github here
As I began wrapping up the programming for the basic gameplay interactions (about 1 night before the due date), I decided to quickly create some low-fidelity 3D assets to create more interesting environments to battle in.
A bridge to connect islands and act as a choke point
Some islands, to create a more divided playspace that forced players to choose when to cross between them.
Some palm trees, to add to the atmosphere and provide an additional small obstacle.
Here’s an earlier iteration of the map, with a previous bridge design that was replaced because it’s geometry interacted problematically with the vassals.
Additionally, I originally tried to work with a top-down camera, but felt that I couldn’t find a balance of showing the entire map while giving enough attention to the seeking behavior of the vassals.
I ran into several roadblocks along the way, but learned even more than I imagined I would in the given time. Unfortunately, much to my dismay as someone from a primarily visual background, I was left with very little time to focus on learning lighting, materials, and camera effects. The result was a very awkwardly-colored poorly lit prototype.
However, I loved working with unity. The separation of functionality into separate scripts and objects that allowed me to compartmentalize code was refreshing. Additionally, working with prefabs that allowed me to build up components of my program as an object felt intuitive. I will certainly work with unity again and mastering lighting and materials will be my next goal.