Uncaged is a 3D platformer where the player, a genetically modified rat, must try to escape the lab in which they were created! The game challenges players to use intricate movement abilities to navigate the environment.

The Team

Max Allen: Producer, Tech Lead, Systems, Mechanics
Collin Gallagher: Tech, Music/SFX, UI
William Smith: Tech, Design, Mechanics
Xander Valencia: Art Lead, 3D Animation, Graphic Design
Yuna Song: Art, 3D Environment Modeling
Zander Barker: Art, 3D Character Modeling

My Role

My primary role for this project was a systems programmer. I developed the camera system which follows the player dynamically and allows designers to adjust camera angles depending on the player's location. I developed the checkpoint system which assigns a new respawn point to the player when they enter a checkpoint trigger. I also helped with the character movement, animation implementation, and various other tasks.

Challenges

The primary challenge I faced with this project was learning Unreal Engine. Unreal Engine is a very intimidating engine because of its many features. It is also very different from Unity 3D, which I am most familiar with. To overcome this, I did lots of googling and reaching out to friends and professors for help with various features of Unreal Engine. One thing that helped with this was using Blueprints for scripting instead of C++ classes. While I now better understand unreal and prefer C++, Blueprints were very helpful because they removed a level of complexity from the development process. The ability to find functions that are relevant to the current context is very helpful because it helps you find the function you are looking for while cutting out all the unrelated functions.

One programming challenge that I faced earlier on was understanding the relationship between Pawn classes and Controller classes. The architecture to separate the control from the object being controlled is a very good architecture decision, but it is something that I had to figure out very early on because it is built into Unreal Engine. Having a completely separate object assigned to control another object is not something I had considered in game development. Coming from Unity 3D, I would separate these functionalities with separate behaviors attached to the same object, but Unreal Engine does not have behaviors so it makes sense that the functionality would have to be split into separate classes and thus separate objects.

Architecture

General game architecture:

Diagram of general game architecture

Implementation of the camera system on the player:

Flow chart of camera system implementation

Implementation of the checkpoint system on the player:

Flow chart of checkpoint system implementation

Lessons

The main lesson I learned was how to approach learning a new game engine. It was frustrating for a while because of my familiarity with Unity 3D, but I learned to be more patient with myself, be willing to make mistakes, and ask others for help when I need it. My recommendation for anyone learning a new game engine is to be patient with yourself and ask for help with whatever resources you have!

Version Control

Our team decided to use Perforce Helix for version control. We chose this version control software because of its ability to lock files, preventing other developers from editing them. This feature is very helpful when working with unreal because the majority of the asset files are stored in binary and cannot be merged if multiple people edit them.

Our experience with Perforce was mediocre. The file locking worked very well and integrated very well with Unreal Engine. The first issue we encountered was that it differs greatly from Git. This resulted in additional time being taken to help everyone get used to using it. Some team members did not end up using it much in the end. The other issue we encountered was that there is no button in Unreal Engine which synchronizes all source control files, so we would have to open P4V (the Perforce visual client) and sync all the files in that application. This would then frequently confuse Unreal Engine, meaning we would have to restart the engine. This issue has been the longer-running issue that made it difficult for our team to get used to the choice of source control software.

Development Logs

More info on this project, including weekly development logs are available at https://squeaksquad.mantis-online.com.