Hive: Armada

Take Flight To Defeat The Deadly Armada

Hive: Armada is a virtual reality bullet hell shooter where players control a gunship attached to the controller, facing off against a multitude of enemy drones across multiples waves of unique challenges, all while collecting in game iridium to buy more weapons and ship skins.

Hive: Armada is a virtual reality bullet hell shooter where players control a gunship attached to the controller, facing off against a multitude of enemy dro...

 

Team Members

Perry Sidler
Miguel Gotao
Chad Johnson
Marc Karam
Ryan Britton
Kara Mendez

Time Frame

August 2017 - May 2018

 

Technologies

Unity
SteamVR
HTC Vive
Oculus Rift

My Roles

Assistant Team Manager
Lead Programmer
GitHub Manager

 
 

Awards

IEEE GameSIG - Intercollegiate Computer Game Showcase 2018 Top 10 finalist and recipient of the Accessibility Award

 

Features

5 wave standard mode with boss
Infinite arcade mode
Object pooling
Colorblind mode

 

4 weapons
2 ship skins
5 power-ups
7 enemies

 

Object Pooling

Goals

Reduce lag
Simplify spawning

 

As development progressed, we started noticing lag in the game. Initially we thought the lag was caused by the number of enemies and projectiles being spawned. I researched causes and solutions for lag in Unity and discovered that the culprit was actually garbage collection dealing with all of the destroyed objects.

I created our object pool manager after one of our professors suggested we look into object pooling as a solution to our lag issues. The manager assigns a type identifier (short ID) to each object type in the pool and a pool identifier (uint ID) that is unique for every pooled object. The pools are stored as an array of Stacks for inactive objects (arranged by type) and a Dictionary for all active objects. When an object is spawned it is removed from its Stack and placed into the Dictionary with its pool identifier as the key. The process is reversed for despawning. I use Stacks for the inactive pools to maximize reusing of objects, therefore limiting the loading and unloading of objects from memory. I used a Dictionary for the active pool for its O(1) search and insertion time complexity.