Stop VR players clipping through walls
How to push a VR player's head back out when it clips through solid geometry, using
HeadClipGuard, and how to make it an optional
comfort setting rather than something every world forces on.
Steps
-
Spawn one with the generated factory method.
HeadClipGuardships as one of TsVRC's own default factory entries, so there's nothing to register on the Configure window first:public class ComfortSettings : TsBehaviour{[SerializeField] private BoxCollider[] _wallColliders;private HeadClipGuard _guard;public void EnableHeadClipGuard(){if (_guard == null){_guard = _ts.CreateHeadClipGuard(transform);}_guard.Begin(_wallColliders, _wallColliders.Length);}public void DisableHeadClipGuard() => _guard?.End();} -
Call
EnableHeadClipGuard/DisableHeadClipGuardfrom wherever your world's own comfort settings toggle lives.Begin/Endare cheap to call repeatedly:Endfully resets the guard's state, so the same instance can be reused across multiple guarded sessions instead of spawning a fresh one each time.
Only guard the geometry that needs it
Pass just the colliders around the specific area a player could clip through (a wall
ring, a doorway frame), not every collider in the world: Begin bakes each one's world
transform once and the guard re-evaluates all of them every frame it's active.
Why this shape
See HeadClipGuard's reference page for how it
decides which direction to push, the three-tier movement gate/batch-scan/full-test
pipeline that keeps per-frame cost down with many colliders, and the two tunable
invariants (_margin, _batchScanExpansion) worth understanding before changing them.