threejs
Three.js / R3F adapter
Inspect the installed Three.js/R3F package versions and the project's existing loop before deciding where simulation lives.
Timing
requestAnimationFrame and R3F useFrame are frame-driven callbacks, not fixed gameplay ticks. AnimationMixer.update(deltaTime) advances animation by the supplied elapsed time and is commonly called from the render loop; it is presentation/animation timing unless the project explicitly makes it authoritative.
If the game already has a fixed logical accumulator, preserve its configured rate. If deterministic gameplay requires one and none exists, introduce an explicit accumulator as a project decision rather than hardcoding 60 Hz. useFrame may feed elapsed time into that accumulator, but render cadence never becomes the logical tick by implication.
Bindings
- input: browser/device adapter into semantic actions;
- pose:
AnimationMixer.update(delta)for presentation or logical pose snapshots where required; - hits: authored Box3/sphere/capsule/custom gameplay volumes, not render mesh visibility;
- knockback: logical movement/collision owner;
- camera: collision-aware sweep/volume test implementing
camera-anti-clip, not a single point ray.
Per-actor hitstop freezes that actor's logical/animation clock; do not stop the whole render loop.