A Game Development Website
Containment Environment Story Telling.gif

Containment 2021

 

Containment

Containment is the first solo practice project in Unity. It began as a study in programming for a 3D game, and expanded into exploring more complex systems such as a rudimentary objective system that has you moving from objective-to-objective until completing a mission. Another major aspect of this project was setting up the project in a fashion where-in game elements could be worked on by someone without touching code, scriptable objects formed the basis of this.

Game Start

‘Last Stand’ - Environmental story-telling

Codex Entry

Design

Containment is a top-down perspective shooter. The player controls their avatar with the ‘WASD’ keys, shoots with the left mouse button, interacts with game elements with the ‘E’ key, and changes weapons with the mouse scroll wheel or number keys.

There was no intention to create any unique mechanics for this practice project. Since the intention was to get used to working with 3D assets, and improving on my C# coding.

Needless to say, this was still an opportunity to make the project more approachable as someone other than the developer. Adding elements such as ‘interaction zones’ to indicate what could be interacted with or picked up. Exploring how to add these in a stylized form that fits the general aesthetic was a welcome break from the coding.

There was an intention to create a simple story behind what the player is experiencing. A cliché experiment gone wrong, and you’re part of the security forces sent to clean it up. This story-telling was done through the environment, through narration by the protagonist, and through codex entries that can be found in the level.

Scriptable Objects

A major aspect I wanted to explore with Containment was designing systems in such a way that a non-coder would be able to use them. Designer tools are an essential part of any development team’s toolbox. They ensure that a designer does not need to modify any code to be able to test ideas or build the content for the game.

Codex pages, objectives and weapons were all built in this way. A designer could create a new codex entry, put down a ‘Codex Pickup’ prefab, and link the written entry to the pick up. Ammunition pick-ups were done in much the same way.

Up to this point - the scriptable objects would still be fairly basic to edit. Using Unity’s inspector without much usage of attributes to help organize the settings save for sub-headings. This would be something I re-visit in a future practice project using a tool from the asset story to be able to create more pleasing to use inspector elements.

Objective System

The objective system is very simplistic. It contains a list of ‘Mission Objectives’ that are triggered in sequence. These ‘Mission Objectives’ can be progressed by:

  • Interacting with something.

  • Reaching a location.

  • Killing a target.

Objectives can be linked to a ‘Narrative Section’ once started, or completed. ‘Narrative Sections’ trigger a piece of dialogue that helps provide context for the next objective, or the current thoughts of the protagonist.

The system came with a fair few limitations. Editing or viewing objectives was not a great experience since it was all done through the inspector and using basic fields. Optional objectives were not possible due to how one objective would lead to another. However, this achieved what was needed at the time. It offered a challenge, and helped guide a player through a level from start to completion.

Movement and Animation

Some of the most challenging aspects that caught me off-guard involved the movement and animation. Syncing animations to what weapon you’re currently holding, using the right recoil effect, moving and shooting, making sure projectiles exit in the right place when firing a gun and moving. These proved to be a bigger challenge than coding systems such as the Objective System.


Eventually - I managed to bring the animations to a point I was satisfied for the sake of practice - however, they are no where near a point I would be comfortable with for a wider audience. This will be something I will wish to re-visit in the future.

Credits

The 3D assets you see in this project are purchased from the Unity Asset Store. Used under the Asset Store Terms of Service and EULA.

The Audio effects, and music used are purchased from the Unity Asset Store and others sources / marketplaces.