"Noclip in a trace-based kinematic controller is a state, not a collider toggle"
You add a noclip toggle to your trace-based kinematic character controller. You try disabling the body collider, but the character still collides with everything — walls, terrain, glass. "Disable collider" has no effect.
A hand-integrated kinematic controller (one that uses SceneTrace / MoveHelper for sliding movement) has no collider component of its own — collision lives entirely in the mover's traces. Disabling a body collider is a no-op because there's nothing to disable; the traces are the collision system.
Implement noclip as a movement state, not a collider toggle:
-
Create a dedicated noclip state whose tick integrates position directly (
WorldPosition += velocity * Time.Delta) and skips gravity,MoveWithSlide, andStickToGround— that's what phases through geometry. -
Fly camera-relative on yaw only — use
Rotation.FromYaw(cameraYaw)instead of the full look rotation, so forward flies level regardless of look pitch. -
Un-stick on exit: toggling off while inside geometry traps the trace mover forever (every trace returns
StartedSolid, zeroing movement). Step the body up until a downward cast no longer starts solid (with a cap), then transition to the air/falling state. -
Break orthogonal systems on enter: drop held props, clear stance, release grapple/rope attachments, zero any charge state. Stale attach state that leaks across the toggle causes phantom connections after returning to normal movement.
-
Audit input bindings before picking the key — check what's already bound on both keyboard and gamepad for the candidate key.
In a trace-based controller, the engine's physics broadphase never sees the character as a rigid body — there's no collider to disable. The traces are the collision. Skipping them entirely (direct position integration) is the only way to achieve noclip. The yaw-only flight and un-stick logic are ergonomic necessities: full-rotation flight is disorienting, and exiting inside solid geometry is a permanent trap for a trace-based mover.