ORBIT
~Programming lead~
Fall 2024
Unity 3D
System
Tool
This fall I developed ORBIT on a team of 9 students in Unity. It is a 3D tile-based puzzle game where the player is attempting to get to the finish tile. Player movement is based on cards that are dealt to the
player from a pre-selected deck. When a movement card is selected to play it is put into the action order, which gets played at the beginning of each turn. Some of the cards dealt to the player allow them to manipulate this action order instead of adding to it. There are also obstacles and collectables spread throughout the 27 levels.
​
On this project, I lead a team of 4 engineers as the programming lead. This role included responsibilities such as organizing, assigning, and prioritizing tasks using Jira and reviewing pull requests on GitHub according to our style guide and documentation standards, in addition to my contributions as an engineer. I was the point of contact when another team or the producer had a question involving programming or scope.
As an engineer on this team, my first task was to create an editor tool for the designers to easily build and iterate on levels. I learned how to use Unity’s GUI to create a custom editor window where designers could set the dimensions of the map and select the tile prefab the map should be built out of, and included 2 buttons designers could use to build and clear maps. This tool would automatically place each tile at the exact coordinates they needed to be at to speed up the level designer’s workflow.
The image above shows some functionality I wrote for the editor window. Below is a demonstration of what the final version of the tool looks like.
To further the functionality of this editor tool, I also added some functionality for individual tiles. The coordinate variable on the tile class is automatically set when the tile is instantiated. Changing a tile object from a “tile” to a “hole” in the inspector removes the tile’s mesh and collider. Also, assigning a specific obstacle or collectable game object to a tile moves that game object into place above the tile.
In order to create the functionality for obstacles and collectables, I created an abstract class for each. Every obstacle class in the game derives from this parent obstacle class. We ended up only including one type of collectable in the game but the functionality to add more was there. The parent obstacle class included getters and setters for different variables on the obstacle, as well as a function to perform that obstacle’s animation and to set it to its default state.
In addition to the level builder tool, I created a levels manager that had information about each level in the game, such as their name, build index, the status of their collectables, and if they’ve been completed. This information is saved between playthroughs. This manager was referenced a lot by UI elements in the level select and pause menus.
After our Alpha milestone, I began to focus on smaller tasks to polish and improve gameplay. I used the unity animator to animate UI elements such as the confirm and cancel buttons and the cards in the action order. Then I created a scene transition manager to help the game flow between levels and menus. I also spent a lot of time bug fixing!
In conclusion, I learned so much working on this project. I was able to practice my communication and collaboration skills, all while learning to delegate tasks within my programming team. I gained an appreciation for developing engine tools and designing systems.