Containment Breach is a first person shooter where players have to escape a hidden facility overrun with alien monsters using their arsenal of weapons.
About This Project...
This game was created for my GAM450 class using Unity Engine for 4 months from January 2021 to April 2021.
This project was made with 4 people, the team breakdown being:
3 Designers (BAGD)
1 Programmers (BSCS)
Weapon Creation Tool & Mechanic Implementations
Enemy AI Designs & Optimizations
Working on Containment Breach
On this project, I mainly got to take on the roll of a technical designer. My technical responsibilities mostly focused around weapons and the weapon making tool, but I ended up picking up a bunch of other systems to get up and running, such as respawning and AI optimizations. On the design front, I got to take the lead on the actual weapons created, as well as carve out the different enemies that the player fought against. I also had to take a lot of the planning + documentation responsibilities, so I did a ton here and touched many aspects of the development process.
Hands down my biggest takeaway from working on this project was getting to create a development tool. I had always wanted to get to take the time to build a tool that could help my other designers iterate faster, so getting my chance here was great for me.
Overall, I think this game fell short of my expectations. We had a lot of really cool pieces, but sadly we didn't have the manpower or time to get them all to connect correctly. I am proud of what we accomplished though, and even more proud of my own work I did as I felt I took a lot away from it and my individual components were solid.
Creating Weapon Tools & Mechanics in Containment Breach
From the conceit of this project, I knew I wanted to build some sort of weapon building system, instead of just making each gun on its own. While this didn't necessarily speed up weapon production (weapon count + only I used the tool), templating out mechanics this way gave me a ton to reuse and also offered a lot flexibility when planning my weapons out and balancing them. Ideally, I wanted to create a reactive interface that showed/hid information based on the settings you selected, clearly conveying what each mechanic did and how it would effect the weapon. I also tried to be as general as possible, so mechanics could be reused in creative ways based on design preferences.
This system had 2 main scripts: a gun behavior script to house all the functionality & UnityEditorUI script to control the component display. Within the gun behavior script, I was able to create the core logic flow each time a bullet was fired, and additional logics could be applied in a sort of a la carte system based on what was put into the inspector in unity. I also took the time to set input bounds where necessary, such as clamping value ranges or requiring an object reference to continue. Combining these elements I was able to do cool things, like using the bullet spread logic to create both the buckshot on the shot gun and provide recoil for the assault rifle.
I was really happy with how this system came out. It was a great first chance for me to make some development tools and get a feel for how your structure an open ended system like this. I could totally see myself extending the mechanics and functionalities I created or even taking what I learned and making it again from scratch. I have been wondering if it would be more or less easier to use if I broke all of the logic into different components...
Enemy AI Design & Optimization in Containment Breach
When making the enemies in Containment Breach, the goal was to shoot for a few simple archetypes so we could get them in within the semester. Working with our AI programmer, we originally planned on doing a 3x3 approach: making 3 different behaviors, then changing stats to make 3 unique enemies (see Shadow Over Karth). Sadly, this ended up just being 2x2, giving 3 easy experiences and one more challenging combatant. They would take the lead on creating the main behaviors (flocking) and mechanics (movement & targeting) and I would help where needed.
I ended up not getting to work too much on the actual AI themselves, but I did get to work through fixing some of the bugs we were having with the AI, as well as optimize for efficiency. I get to work on the spawner manager, displaying the enemies spawn range as well as tinkering the logic to make sure all enemies spawned in a valid location. Optimizations I got to work with had to do with me adding occlusion culling the the player, as well as gating AI activity in bubbles so the all agents were not active at the same time. I even got to work through a crazy bug with the Unity physics debugger where I found out the enemy colliders were falling through the ground, making them invincible!
The AI in the project feel short of my expectations for a few reason. First all, I don't think we had enough variation for players to care about the different AI types. They all just sort of ran at you, and didn't really change how you approach each combat encounter. Given the time we had, I think we made the right choice scope-wise, but the experience suffered as a result. Another issue is the AI also didn't feel very alive or reactive, making combat with them feel gray. Some more love could have been given in that aspect as well. A positive is that I did get to get a little nitty gritty with bug solving and optimizations with the AI, something I normally didn't do. This gave me some great info about how to approach making my AI in the future, as well as give me some new ways to approach issues when working in Unity.