# Character Controllers **Target:** Unity **6000.5+**, built-in 3D physics (PhysX). For VR rigs on Quest 2 the locomotion layer is different (XR Interaction Toolkit providers on Unity 6.3 LTS - see [[Meta Quest 2]]); the *metrics* half of this series still applies. This is the tutorial [[Level Up! (Review)]] lists as **Gap 1: "Character controller and gameplay metrics (L5)"** - a controller, a metrics ScriptableObject, coyote time and jump buffering, and a **gray-box metrics gym** with gap, ledge and door test pieces. > [!note] Verification status > `CharacterController` members (`Move`, `SimpleMove`, `isGrounded`, `collisionFlags`, `slopeLimit`, `stepOffset`, `skinWidth`, `minMoveDistance`, `enableOverlapRecovery`, `velocity`, `OnControllerColliderHit`) and `Rigidbody.linearVelocity`, `Physics.CapsuleCast`, `Physics.SphereCastNonAlloc`, `Physics.ComputePenetration` were checked against the Unity **6000.5** Scripting Reference on 2026-11-07. The docs site labels several of these pages "Legacy" with newer versions listed. **No code in this series has been compiled or play-tested in the Unity Editor.** ## Parts | # | Note | Covers | |---|---|---| | 1 | [[1. CharacterController vs Rigidbody Characters]] | How each works, decision table, what you give up | | 2 | [[2. Movement Metrics Asset]] | Metrics ScriptableObject in meters: height, radius, speeds, jump height/distance, step, slope - plus derived gravity | | 3 | [[3. CharacterController Implementation]] | Camera-relative movement, coyote time, jump buffer, variable jump, slopes, pushing props, moving platforms | | 4 | [[4. Rigidbody Character Implementation]] | Velocity-matching dynamic capsule, ground probe, slope projection, step handling, knockback | | 5 | [[5. Gray-Box Metrics Gym]] | Script that builds a gym from the metrics asset: gaps at 80/100/120%, ledges, doors, stairs, slopes, crawlspaces, plus a blob shadow | | 6 | [[6. Character Controller Pitfalls]] | Grounded flicker, slope jitter, step-up popping, interpolation, scale, mixing Move calls | ## Level Up! tie-ins (Level 5 "Character", Level 7 "Controls", Level 9 "Gray Matters") - **Metrics sheet before the level.** Part 2 turns Rogers' metrics (height, walk/run speed, jump height and distance) into an asset; Part 5 builds the world *from* those numbers. - **"As the button is pressed, the action should happen."** Coyote time, jump buffering and input in `Update` (Part 3) are the code behind responsiveness. - **"Me and My Shadow."** Part 5 includes a blob-shadow landing aid. - **Gray-boxing.** The gym is a gray box whose only job is to prove the metrics - build it before any real level. - **Character-relative vs camera-relative controls.** Part 3 implements camera-relative; flip one flag for character-relative (Level 7 exercise). ## Related (existing) - [[Physics 3D]] - Rigidbody, colliders, layers and queries this series builds on; [[6. Worked Example Pushable Prop]] is a simpler force-based capsule - [[Physics 2D]] - the 2D equivalent; [[5. Physics 2D Kinematic Platformer with Slide]] uses the same metrics math - [[Surface-Walking with an Omnidirectional Player Movement]] - an existing tunable movement controller (its Step 6 values are a metrics sheet) - [[Input System]] and [[Unity New Input System Upgrade Tutorial]] - Move/Jump/Sprint actions - [[Cinemachine 3]] - the camera that camera-relative movement reads from - [[Animation]] / [[3.Root Motion Advanced]] - root motion vs controller-driven motion - [[NavMesh in Unity 6 (AI Navigation 2.x)]] - Agent Type radius/height/step/slope should match Part 2's metrics - [[Stat-Driven RPG Systems]] / [[2.Modifiers and Timed Buffs]] - speed power-ups as modifiers on the metrics - [[Audio Mixers and Character Audio]] - footsteps and landing sounds driven by this controller - [[7.Quest 2 Worked Example Room]] - gray box at VR metrics - [[Game Programming Patterns (Review)]] - State (grounded/airborne), Component, Update Method, Type Object (metrics assets) - [[Level Up! (Review)]] - Levels 5, 7 and 9 ## Official docs (hub index) - Character control (Manual, 6000.5): https://docs.unity.com/en-us/engine/6000.5/manual/physics-section/physics-overview/character-control-section/character-controllers - Character Controller component: https://docs.unity.com/en-us/engine/6000.5/manual/physics-section/physics-overview/character-control-section/class-character-controller - `CharacterController`: https://docs.unity3d.com/6000.5/Documentation/ScriptReference/CharacterController.html - `CharacterController.Move`: https://docs.unity3d.com/6000.5/Documentation/ScriptReference/CharacterController.Move.html - `ControllerColliderHit`: https://docs.unity3d.com/6000.5/Documentation/ScriptReference/ControllerColliderHit.html - `Rigidbody.linearVelocity`: https://docs.unity3d.com/6000.5/Documentation/ScriptReference/Rigidbody-linearVelocity.html - `Physics.CapsuleCast`: https://docs.unity3d.com/6000.5/Documentation/ScriptReference/Physics.CapsuleCast.html See also (added 2026-11-08): [[Music Mood Mixer]] — optional movement/combat signals into the adaptive score, alongside the footstep events already consumed by [[Audio Mixers and Character Audio]]. See also (added 2026-11-10): [[ProBuilder Gray-Boxing and Landmarks]] - editable blockout after the metrics gym; [[Combat Feel and Hit Feedback]] - knockback is consumed by the motors in this series.