Samson Wu Logo Image
Samson Wu
Hub concept
Current concept of the hub in Charon's Corner.

Charon's Corner - Overview

Charon's Corner is a high-speed 3D cart-racing inspired project reimagining Greek Mythology's ferryman of death as a bowler who sends souls to the afterlife by bowling their skulls down a bowling lane. This game is in its early stage of development by the Studio Aspen team of 2025-2026, a student-led AAA simulation studio from EGD Collective.

  • Role: Programming Director
  • Platform: PC / Mac
  • Engine: Unity
  • Team Size: 80+
  • Duration: 2 months (Ongoing)
  • Build: Coming soon to Steam
  • Source: GitHub

Technologies

C#
Unity 6
GitHub
GitHub Actions
Wwise
Blender
Agile Development
CI/CD

My Role

As Programming Director, I led the technical direction of core systems architecture and handled all of the DevOps behind the project. I also supported my team members and communicated across all departments through Agile development. What I did:

  • Auto documentation generation through DocFX
  • Custom single entry point system
  • InputManager supporting controllers and keyboard + mouse
  • Save system
  • UI framework
  • Settings menu framework

Highlights

DISCLAIMER: This section is work in progress because of ongoing development.

Custom Editor Single Entry Point

Charons corner single entry point showcase
Single Entry Point and Bootstrapping
Read more

Custom Editor Single Entry Point

Goal

I wanted to enforce a Single Entry Point within the Unity Editor and not just in the final build. This ensures that every time a programmer presses Play, the game always boots from a consistent starting point, the Bootstrap scene, which initializes all core singletons and systems.

Another goal was to make sure that other programmers could work safely in any scene while still having access to the same core managers like the GameManager. This prevented missing reference issues or dependency errors when testing non-buildlisted scenes.

Solution

I developed a custom Editor script that hooks into Unity's EditorApplication.playModeStateChanged event. This script automatically handles scene switching and state restoration during Play and Edit Mode.
Flow:
1. Prompts the user to save unsaved scenes before entering Play Mode.
2. Switches to the Bootstrap scene, which contains all singleton initializations.
3. Remembers the developer's original scene and restores it when Play Mode ends.

The Editor automatically switches to the Bootstrap scene on Play, ensuring consistent system initialization. When exiting Play mode, the Editor switches back to the original scene.

Challenge #1: Addressable Scene Management

Unity does not normally allow switching to scenes that aren't part of the build list, which caused issues since the Bootstrap scene wasn't included. To overcome this, I temporarily marked the scene as Addressable in the Editor, allowing safe scene switching during Play Mode. After exiting Play Mode, all scenes were reverted to their normal non-addressable state. Marking and unmarking addressable scenes dynamically had to be isolated to the Editor, so it would never affect actual runtime builds.

Challenge #2: Scene Save Enforcement

Unity allows entering Play Mode from unsaved scenes, which would discard scene changes under this Bootstrap system. I resolved this by forcing a save confirmation before continuing to Play Mode.

Bootstrap save confirm screenshot
The forced save prompt when attempting to play from an unsaved scene.

Challenge #3: GameManager Initial State

While testing individual levels in the Editor, I needed the GameManager to start in the correct state depending on which scene was loaded. For example, bootstrapping directly into Level 1 should start in the Gameplay state instead of the default Title state. To handle this, I implemented a BootstrapConfig ScriptableObject asset that maps each scene to its corresponding initial GameState using a dictionary. During runtime, the BootstrapLoader checks this configuration to determine the proper starting state. If a scene isn't defined in the config, the system defaults to the Gameplay state, ensuring proper initialization across all test and production scenes.

Bootstrap config screenshot
BootstrapConfig ScriptableObject mapping each specified scene to its GameState. If the bootstrapped scene doesn't have an entry in the config, the game defaults to Gameplay GameState.

Outcome

This system standardized the testing workflow for the entire team. Every Play session now starts from the same initialization pipeline, ensuring consistency and preventing missing singleton issues. Developers can work freely in any scene without worrying about setup, while still maintaining the project's Single Entry Point principle.