Okay, so the name of this one is slightly misleading, but the outcome it produces is practically identical to a traditional tripwire. I created this class for The Jam Factory, when we needed a way to trigger events and sequences once a player got to a specific part of the map. I wanted something that was easy to place in the scene, could trigger as many sequences as needed, and would ignore the player if they hadn't progressed far enough in the game (ie. completing a puzzle). The solution I came up with was a Tripwire, and there were two main iterations.
The first used a simple Raycast and when the ray detected the player the event is triggered. This didn't work very well. Depending on the framerate the player could completely miss the event. This would also be the issue with Unity's native OnTriggerEnter() function. Not ideal! There also wasn't an obvious way to ignore the player. So I went back to the drawing board.
Dot product turned out to be the way to go. Very basically, dot product is a mathematical operation that measures how aligned two vectors are. The formula is very useful to find things like angles between vectors, or in my case, if a vector (player position) is behind another vector (tripwire). This solves the issue of the Tripwire missing the player since it will constantly check the player's position on every frame. Since the Tripwire has to be initialized to start tracking the player, it can easily ignore the player whenever I want. This solution is easy to visualize, simple to implement, and doesn't run the same risks as Raycasts or collision detection.
Made for the Bigmode 2025 Game Jam, Power Yield is an FPS rogue-like where your power diminishes each run. I developed the base movement for the game and integrated/refined the grapple controls.
Movement is done with a rigidbody as I wanted to have fluid, physics-based movement. The player's move input is taken and immediately adjusted with an acceleration/deceleration factor. This new input is then applied to the rigidbody's velocity after adjusting for the player's facing direction and multiplied by a set movement speed. This system of acceleration/deceleration keeps the controls feeling tight while also keeping them realistic. It also works with a character controller (non-physics) system. Movement for jumps, hover, and grapple are done by adding/adjusting forces onto the rigidbody which results really satisfying, momentum-based control.
The grapple jump is my favourite mechanic in the game. The appliciation of it is pretty simple but it still feels great. While the grapple is pulling you in the player velocity is set to a fixed grapple pull velocity. If the player jumps during this sequence force is applied in the player's forward and upward direction and the player enters what I call "fling state". During fling state whatever movement the player performs is applied against their current velocity creating a deceleration effect. Once the player's velocity is below a certain threshold (or the player lands on the ground) the player exits fling state and normal gameplay resumes.
Originally developed for Dead on Arrival, I've continued iterating on my audio manager since graduating university. It uses a dictionary of scriptable audio objects that contain basic information about an sound (clip, pitch, volume, etc...) that is then applied to an audio source and played.
Sound Manager has some specialized functions for audio seeking, specifically looping a clip with an intro and something I like to call an "Audio Sprite Sheet". The intro looping tracks the clip's time samples and resets them to a set point (the length of the intro) on subsequent loops. Similarly, the audio sprite sheet is set up with an array of timestamps that the sound manager will seek to with the time sample system and play the audio clip until it reaches the timestamp of the next index. You can also randomize the index to create a variety of sounds without having to load another sound clip.