Execution order key (§39); default PRIORITY_KINEMATICS.
Whether KinematicSystem.dispose has run. Disposal is terminal
(§83): a disposed system refuses its mutating entry points with
INVALID_APPLICATION_STATE (§89) rather than silently working.
Tracked nodes, in the order they will be advanced.
Number of tracked nodes.
Stops advancing every node. The system stays registered.
Drops every tracked node (§39 teardown).
Advances every tracked node's active locomotion and commands by
time.fixedDeltaTime, in the order documented on the class.
No per-registration setup is needed (§39).
Starts advancing node. Idempotent — tracking a node twice keeps its
original position in the iteration order. Returns node.
The node need not have a KinematicController yet; it is looked up every step, so tracking first and attaching later is fine.
Advances every tracked node's KinematicController once per fixed step (§39 step 4).
Three components, one system, one authority (§42; PH-11 residue, 2026-08-21)
This system also advances §12's CharacterController and §44's FirstPersonLook, for
ConstraintSystem's reason: all three components write a transform under the same"kinematic"authority, and §42's check compares the authority, not the system instance — so a second system would be a second writer that nothing could catch. Within a node the order is fixed:moveTo,rotateTo,followPath).The command channel runs last deliberately: a scripted move is what takes a character away from the player, so an active command wins over locomotion for the steps it runs. They are alternatives, not layers — as an
OrbitRigand aFollowRigon one node are.A component is stepped only when it is
active, and a node whose components are all idle is skipped before the §42 check, so it reports no conflict.Tracking is explicit and mirrors
MotionSystem's mechanism exactly, for the reasons documented there: the component is looked up every step (so attaching, detaching, or replacing it needs no re-tracking), the tracked set is iterated in insertion order (§33), a node withenabled === falseis skipped, and mutating the set during a step followsSetiteration semantics. Stepping allocates nothing (plan D7).