Scriptable Object Event System
For Tough Catch, I wanted to test out implementing an event system using ScriptableObjects to communicate events across different areas of the game. Each minigame has a scriptable object event variable that they subscribe to to listen for when to start and they broadcast an event through a scriptable object to let other scripts know they've ended. I also use this system for taking damage, letting other scripts know the fish you caught, and other aspects of the game as well.
Tuggle Phase Minigames
The minigames for this portion of the game all come at you at the same time, with a maximum at two happening at any particular moment so I wanted to have a state machine that juggles between the minigames in this phase and present them to the player, waiting until it finishes to shuffle a new one. Each minigame derives from a base class so if a minigame is designed and has the components necessary for it to start, run, and end, it can be added to this phase, or any phase in the game, and will play as normal. This way it's modular and was easy to add more minigames when ideas came up for new ones.
Star System
To add a bit of replayability to the game, I added a star system that rewards the player with stars depending on how they play the game. They are awarded for different aspects of the game like catching the boss of the lake, completing the game on hard mode, and so on. I created an overall manager singleton for stars that is called on when a condition to earn one is completed. Then the results screen reads the data from this manager to display the correct amount of stars
Main Menu UI
Really wanting moving UI for the main menu, I used Cinemachine to have the camera move to different parts of the environment for different menus/submenus and used the animator to animate the different UGUI elements on screen to add more game feel.