top of page
Background.png
9CwWbW.png
 
Roles:

Lead Programmer

Systems & Gameplay Programmer

Duration:

5 Weeks

Team Size:

16 People

Link to Project

Tools Used
Grå texturbakgrund
image.png
image.png
JetBrains_Rider_Icon.svg.png
image.png
png-transparent-jira-hd-logo-thumbnail_edited.png
image.png
cartoon-face-discord-logo-0ttqD7nB_t_edited.png

As Lead Programmer for the programming department within a 16-person project, I pivoted the project from Rigidbody physics to a custom-tuned Character Controller to solve complex 3D orbital camera interactions. This project demonstrates my proficiency in C# systems architecture, polymorphism, and the implementation of decoupled event service for optimizing CPU overhead by ensuring systems only update when specific game state changes occur.

Scapegoat_Trailer.gif
  • Challenges:

    • Developing a stable 3D player movement system that avoid "slingshot" physics bugs when combining Rigidbody components with a 360-degree rotating camera.

    • Creating a flexible Player State Machine that maintains consistent input directions (eg., "Right" is always "Right") regardless of the camera's orbital angle.

    • Implementing a decoupled event system to manage complex interactions in a large 15-person team without relying on fragile Inspector references.

     

    Actions:

    • Pivoted from Rigidbody physics to the Unity Character Controller component, learning its API to implement custom ground checks and collision logic.

    • Build a Player state Machine utilizing Polymorphism, protected read-only fields, and sealed classes for high encapsulation and code safety.

    • Developed a Custom Event Service using delegates with varying parameter counts (0, 1 and 2) to facilitate clean, subscription-based communication between scripts.

    • Implemented Unity's New Input System from scratch to support seamless controller and keyboard switching.

     

    Results:

    • Delivered a polished, responsive 3D character controller that handled 460-degree camera rotation without movement drift.

    • Created a robust, bug-resistant codebase that allowed 15 team members to work simultaneously without losing scene references in Perforce.

    • Standardized the project's technical architecture through strict naming conventions and centralized even handling.

  • Lead Programmer:

    • Oversaw a team of programmers, established naming conventions, and helped manage the Unity versioning/Perforce workflow.

     

    Advanced Player Logic:

    • Authored the Player Controller, Orbital Camera system, and a ScriptableObject-based Player Stats system for easy designer balancing.

     

    Systems Architecture:

    • Implemented a Custom Event Service to reduce code coupling and improve project stability during Perforce merges.

     

    Optimization & UI:

    • Developed a Graphics Settings menu featuring Nvidia DLSS, Anti-aliasing, and texture quality controls to improve performance on varying hardware.

     

    Tooling for Designers:

    • Integrated the Input System and serialized variables with [Range] sliders to allow designers to tune the player "feel" in real-time.

  • Technical Adaptability:

    • This project forced me to step out of my comfort zone with Rigidbody physics and learning the Character Controller API and Quaternion/Vector3 math. Spending 9 days on camera-relative movement was a massive learning curve that solidified my 3D math skills.

     

    Architecture vs. Administration:

    • As Lead Programmer, I balanced high-level system design with the administrative task of unblocking other disciplines. I learned that clear documentation (like summary comments in code) is vital for team-wide systems.

     

    Optimization Mindset:

    • Implementing DLSS and graphics settings late in the project showed me that optimization logic should be considered from day one, rather than as a final "add-on" feature.

     

    Encapsulation:

    • By using sealed classes and read-only fields in my State Machine, I learned how to "defend" my code against unintended modifications by other programmers.

    • Player Camera
      blob.gif
      Player Controller
      blob.gif
      Player Stats Scriptable-Object
    • Event Service
      Video Settings
      blob.gif
      blob.gif
bottom of page