MFPC - Modular First Person Controller

MFPC – Modular First Person Controller

MFPC is a clean, modular, production-ready first person controller for developers who want full control — not a rigid framework.

Built for FPS, immersive sims, and narrative experiences, it provides a solid movement foundation while staying completely flexible: no forced animation systems, no UI dependencies, and no opinionated architecture.

Controller-first, not demo-first.

Take a look at the WebGL demo, documentation, roadmap, youtube tutorials and join the discord server!


Movement & Player State

  • Walk, Sprint, Crouch, Jump, Aim, Lean
  • Hold or Toggle modes (configurable)
  • Forward-only sprint restriction
  • Collision-safe auto-uncrouch
  • Optional auto-unsprint when stopping movement (toggle mode)
  • Optional advanced slope handling
  • Optional steep slope sliding
  • Physics interactions with environment.

Movement is predictable, tweakable, and free from hidden behavior.



Input Systems

  • Legacy Input System controller
  • New Input System controller
  • Mouse + keyboard support
  • Gamepad support (tested with multiple controllers)
  • Sensitivity parity between input systems
  • Frame-rate independent mouse smoothing (New Input System)

No need to rewrite gameplay logic when changing input workflows.



Camera System (Cinemachine-based)

MFPC is built around Cinemachine, not custom camera math.

  • Virtual Camera setup for: idle, walk, sprint, crouch, aim
  • FOV kick on sprint (via Virtual Camera swap)
  • Headbob via Cinemachine Noise (no custom scripts)
  • Custom camera blends for smooth transitions
  • Lean-based camera roll (Dutch)
  • Camera tilt feedback on slopes
  • Separate aim camera variants
  • Clean integration with camera stacks

Optional module:

Disable headbob/noise globally (no need to edit cameras manually)


All camera behavior is visual and editable — no black-box scripts.



Animation & Events (Optional Modules)

MFPC does not require an Animator — but integrates seamlessly with one.

AnimatorBridge:

  • Syncs Animator parameters from controller state and velocity
  • Supports movement speed, grounded, crouch, sprint, aim
  • Includes jump/fall detection and vertical velocity
  • Works with both input system controllers
  • Optional auto-detection and LateUpdate syncing

Perfect for driving blend trees and layered animation setups without modifying the controller.


EventObserver:

  • UnityEvent-based state transitions — Jump (leave ground), Land, Sprint / Crouch / Aim / Move / Lean
  • Inspector-friendly — no custom scripting required
  • Ideal for audio, VFX, UI, or gameplay hooks

These modules keep MFPC lightweight while enabling full production integration. 


Included Animation Starter Setup

MFPC includes a lightweight first-person animation starter setup to help you quickly prototype:

  • Clean first-person arms model (.fbx)
  • Humanoid rig compatible
  • Basic locomotion animations included
  • Ready to use with AnimatorBridge

This setup is fully optional and can be replaced with your own assets without affecting the controller.



Optional Stamina System

  • Sprint drain and regeneration
  • Jump stamina cost
  • Exhaustion and recovery behavior
  • Fully optional — no UI or HUD required

Includes a demo stamina UI example, which can be completely removed without affecting MFPC.



Audio System

  • Surface-based footsteps and landing sounds
  • Terrain and object support
  • Water surface handling
  • Audio pooling (no runtime instantiation spikes)
  • Easy to extend with ScriptableObjects

No hardcoded layers. No forced setup.



Architecture & Design Philosophy

MFPC is intentionally not an all-in-one solution.

  • No forced Animator Controller
  • No stamina system assumptions
  • No UI or HUD dependencies
  • No required layers or tags
  • No multiplayer logic baked in
  • Zero GC allocations in Update

Instead, MFPC gives you:

  • Clean state logic (by exposing variables)
  • Clear extension points
  • Optional systems via future modules

Build exactly what you need — nothing more.