First group project I was part of at Futuregames. (This was worked on in 2024 and was made in Unity)
The team was 15 people total and I was one of four programmers.
The theme we had for this project was "fun".
The way we went about was this:
A game about a living toy knight protecting their child's dreams from nightmares.
I worked with many parts of the game, mainly through bug fixing and implementation assistance for other disciplines.
In essence, I was an all rounder programmer for this project.
When it comes to what I did specifically:
I helped with implementing the animations, by both creating the script for animation controlling and connecting it with the other mechanics and even did some tweaking in the animation graph itself. I also helped with guidance for our VFX when it came to inputting the animations into unity. The sword and shield are some examples were I did animation connection.
The Player stun state was originally made by me. It was then taken over by our UX, who added their stuff into it. I then took it back and to update it.
The bounds of the level was taken care of by me. It was originally a trigger box which teleported back in the player if they moved out of it, but it had some flickering issues and such, so I eventually just switched out to collider boxes instead.
The enemy spawn system was basically only handled by me. (The green orbs you see in the above picture are the spawn points gizmo rendered) I explain further down this page about it!


I as a programmer felt more as a bug fixer in this project than content creator.
A lot of the other main systems were taken care of by my fellow programmers, while I acted as a flexible moving hand, helping whenever I was needed.
We did have some miscommunications and version control issues which halted our progress a bit, but in the end we still managed to features in the game in a reasonable pace.
My takeaways:
I want to make stuff, not just bug fixing.

The spawn managers store all possible spawn locations (vector2) in an array and displays them in engine using gizmos rendering.
I also have a _radiusCenter gameObject, which is used when calculation a potential spawn location by adding in a randomly selected position from the _spawnPositions array.
All enemy types are stored in a struct called "SpawnType". It stores the prefab data, the minimum time needed before it can spawn, what rate it spawns and random spawn delays and offsets.
I also used async tasks for spawn delaying. I saved a base time value and minus it using the current remaining time, which was then saved into a float called addedNumbers. I then took this float and multiplied it using a float called _difficultyValue. I used this value plus a base spawn count to create an int which determined the amount of enemies which should spawn for this wave.
I also make sure that enemies do not spawn from the same spawn point, by storing already used positions in a list. Then I look through my spawn types, starting from the top (which should have the least chance of spawning). I do a random float calculation and see if it is lower than the current spawn rate. If so, then it will spawn that enemy type.
I use an enum to say what attack the player is currently doing. The player body is split into upper and bottom body in the animation graph. The bottom is either standing or walking based if any input is being sent. I use bools to turn on and off what animations should be played. The animation state controller also controls the player rotation by using the position of the mouseAim object. (It's the cursor. We used an orthographic camera view, so we needed to convert the mouse position on the screen, to the actual world position, since it would other vice be a bit of in aiming the shield throw)