Player Camera
I programmed and maintained the player camera throughout the project, which was a much bigger task than I first expected. I have made first-person cameras before but it was nowhere near the amount of bug fixing and work required for a third-person shooter camera. I ensured we had basic movement during Alpha because the player relied on the camera's direction to know where to go, so I finished a RotateAroundObject function and zoomed by changing FoV during Alpha.
Camera Wall Detection
One of the main issues with making a third-person camera is that you can back up into walls and see through the other side. To fix this we're using two raycasts offset by a small number and checking if anything is in the way of the camera. Our first process was placing the camera at the point the raycast hit, which worked but also screwed up your aiming which would interrupt gameplay. The new method I used is to reduce the offset the camera has to the player when it collides which will not change where the player is aiming.
Camera x,z axis lerping
We wanted a lerping camera so that it followed the player slowly and more naturally, a big problem with this was that when strafing (moving left and right very quickly) the crosshair moved drastically which made it hard to aim.
I fixed this by lerping between the camera's targetPosition and its lerpPosition by the rotation configured to be a value between 0 and 1 matching the camera's rotation with 1 being forward/back and 0 being left and right.
Camera y axis lerping
In our reference game Ratchet & Clank (2016) we noticed that if you jump the camera stays still but when you double jump the player would be out of view for the camera so then it moves with the player. This makes jumping feel much better, especially with precise jumps.
Cinematic Camera
I started making cinematic cameras (later becoming my specialization) in this project, I had planned to make a system for in-game cinematics for a while now so I made this while we were planning the game in preproduction. It was then put on hold up until Alpha/Beta.
Weapon Upgrade
We used the dynamic camera system together with Elin's
animation controller to make a weapon upgrade cinematic. This turned out really nicely.
Cutscene implementation
I continued developing the Splash Screen, intro cutscene, and outro cutscene implementation in this project. We load the entire project while the splash screen and intro cutscene is playing on a separate thread.
Weapon Pointlight
I parented a pointlight to the weapon and quickly programmed functionality to switch the color of the pointlight depending on the current selected weapon.
Crash dumps (exception handler)
During playtests and when level designers use our engine we get tons of crashes, having to rely on words or screenshots of what happened is very tedious and often unhelpful. That's why I programmed an exception handler that creates crash dumps whenever we crash so that we can locate the exact cause of the problem whenever someone crashes.
Discord Bot (Perforce)
During all our projects the busy programmers have always been the ones to make new builds for both the game and the editor. To alleviate the programmers I made a discord bot with a server on my computer using its own perforce workspace. With this bot, anyone from any discipline can run a /build command and then /submit to update the current build. This can also be used to verify if the current build can compile since the bot will tell you.