Intro: Freedom to Customize Without Fear Most controllers lock you into their design. If you want to remove a state like crouch, stamina, or cover — the whole system falls apart. This forces developers to either keep unwanted mechanics or rewrite core code. The Modular Third-Person Framework is different. It’s designed with interfaces, enums, factories, ScriptableObjects, and events/delegates, so you can add, remove, or replace mechanics without breaking the entire system.
The Challenge: Hardcoded Systems Other controllers suffer from:
- Tightly coupled logic → stamina code inside movement scripts.
- Animator dependency → removing an animation breaks transitions.
- Global state spaghetti → removing crouch requires editing dozens of files.
- High maintenance cost → small changes ripple across the project.
The Solution – Truly Modular States The framework’s state machine and subsystems are modular by design, meaning no mechanic is essential to the core loop. Key Features
- Enum-Driven States → All movement, animation, IK, and interaction systems use enums (not strings), so states can be added or removed cleanly.
- Factory Pattern → States are instantiated by a central factory — just remove a case, and the state no longer exists.
- Interface-Driven Contracts → IPlayerState, IHealthState, IStaminaState, IBreathState, IInteractable, and IInputCommand ensure no subsystem depends on specific implementations.
- Event & Delegate Communication → Removing a system doesn’t break others, since they only subscribe to events, not hardcoded calls.
- ScriptableObject Configs → Vitality, collider, and interaction configs can be safely detached by unassigning them from the CharacterConfig hub, so the system never references them.
- Animator Integration → No hardcoded animation transitions. As long as the state is unbound, the Animator continues to run without issues.
Proof: Removing Systems in Action Without the framework:
- Removing stamina → breaks sprinting and rolling logic.
- Removing crouch → leaves broken animator transitions.
- Removing cover → causes null references in movement code.
With the framework:
- Remove stamina → movement works fine; sprinting just won’t drain stamina.
- Remove crouch → locomotion continues seamlessly, no null refs.
- Remove cover → framework ignores cover logic; other interactions still work.
How to Remove a State Safely (No Core Edits Required)
- Unbind the input key → in the Input setup, don’t assign a key/button to that action. No binding = no transition.
- Remove state from factory → comment/remove its case in the state factory; the state won’t be created.
- Detach ScriptableObjects → if the mechanic uses configs (e.g., stamina, collider profile), unassign them from CharacterConfig.
- Remove interactable scripts (if applicable) → for scene-driven states (Cover, Climb, Parkour, Water), don’t place the corresponding script (e.g., CoverObject).
- Events remain safe → if a state never fires, no subscribed systems break.
Developer-Friendly by Design
- Plug-and-Play → States can be removed or swapped like modules.
- No Core Edits → Core controller code remains untouched.
- Safe Defaults → With no input and no SO reference, states are effectively disabled.
- Scalable → Removing one mechanic doesn’t block adding new ones later.
- Testable → Easily strip out mechanics for lightweight prototypes.
Use Cases
- Prototyping → Quickly strip unused mechanics for simple demos.
- Unity developers → Only keep mechanics that fit your game (no feature bloat).
- Studios → Test multiple gameplay variations (with or without stamina, cover, or parkour).
- Learning → Start simple with locomotion, then scale up as skills grow.
Closing: Customize Without Fear With the Modular Third-Person Framework, you’re in control. You can remove any state or mechanic you don’t need, and the system will keep running — no spaghetti code, no hidden dependencies, no broken controllers.
👉 Get the Modular Third-Person Framework on the Unity Asset Store: Modular Third-Person Framework | Game Toolkits | Unity Asset Store