autoCleanup on Behaviour β register disposables or cleanup functions tied to the component lifecycle. Automatically cleaned up on disable or destroy depending on when registered:
PlayableDirector: expose tracks and activationTracks getters, support runtime playableAsset assignment with automatic graph rebuild
PhysicsCollider: expose density property, add @validate decorator for automatic property updates at runtime
Timeline AudioTrack volume getter/setter
Networking: beginListen now returns an unsubscribe function (backwards compatible β stopListen still works):
const unsub = this.context.connection.beginListen("my-event", (data) => { ... });
unsub(); // or use this.autoCleanup(unsub)
Changed
Serialization: consolidated instantiate reference resolution into a unified system β fixes cloned timelines, EventLists, SignalReceivers, and deep component references not resolving correctly after instantiate()
Context.events β typed event bus for decoupled component communication. Known events get autocomplete; custom events can be typed at the call site:
context.events.on("scene-content-changed", e => console.log(e.object));
context.events.emit<{ pts: number }>("scored", { pts: 10 });
ContactShadows auto-refit β when autoFit is enabled, shadows automatically refit when scene content changes (e.g. SceneSwitcher load, DropListener asset loading)
Input.addEventListener now returns an unsubscribe function (works with autoCleanup):
AnimationBuilder β low-level API for defining animation tracks with typed keyframes and tween shorthands. Used by AnimatorControllerBuilder and TimelineBuilder for inline .track() calls
TimelineBuilder typed track builder interfaces per track type (AnimationTrackBuilder, AudioTrackBuilder, etc.) with inline .track() support for keyframe animation
AnimatorControllerBuilder: inline .track() for defining animation directly on states, support for TrackDescriptor arrays as clip sources, simplified exitTime (replaces separate hasExitTime flag)
Physics raycast includeTriggers option β opt-in to hitting trigger/sensor colliders (skipped by default)
OrbitControls.fitCamera deprecated overload removed from type declarations (runtime still accepts Object3D for backwards compat β use fitCamera({ objects: [...] }) instead)
Fixed
OrbitControls: programmatic camera transitions (e.g. fitCamera) no longer interrupted continuously during an ongoing drag β only at interaction start
fitCamera with centerCamera: "y" producing incorrect camera elevation when camera was above the scene center
Animator: switching runtimeAnimatorController now properly disposes the previous controller
AnimatorController.dispose() guard against missing mixer