I was the lead programmer for this project, implementing the core mechanics and systems as well as building tools for designers or other programmers to use
I created a level editor for the designers to use to make rhythm platformer charts. Some of the key features of the level editor include:
The ability to place objects in the world
Saving and loading level data
Placing ground sprite shapes
Moving around the level freely
Saving and Loading
One of the first things we needed was to be able to save and load our map data. We initially considered making each level scene based, but for the sake of our future scope and the ability to add levels, we decided we would try to save the entire level into a file.
The level files mostly comprised of level objects, which stored necessary data like the objects position. Objects could inherit from the level object data to store additional data they need, allowing for a flexible save system.
All the data is stored in a level data class that is converted into a JSON file, which can be loaded back into a new object of the class to preserve the data.
Generating death zones
Since our level had various elevations, we needed to place unique death zones for each level. I considered writing code to automatically determine when a player would be considered "dead" but found there were too many edge cases. As a result, I ended up making a function that ran a raycast continuously throughout the entire level and generated points for a polygon collider to make dynamic death zones for each level, existing to save the effort from manually placing death-zones across the entire level.
The level editor has a good bit of other features, but for your and my own sanity's sake I'll move on.
The level select carousel was one of the much more challenging tasks for the project due to the diegetic nature of our UI. The carousel's features include:
Scrolling up and down, snapping to buttons
Toggling difficulty
Playing the level's song when hovering
Implementing the carousel itself required writing custom UI code taking advantage of unity's built in scroll view element. To achieve the perspective on the carousel, I utilized multiple different types of cameras, all tied to different UI canvases.
I designed and implemented our settings menu, aiming to make something both intuitive and visually appealing. I worked with unity's built in event system to make the UI navigable with arrow keys or controller.
I was the main concept artist and animator for the main character, working together with other artists to fit our game's style. I also implemented all the animations into the game.