Skip to content

Variable: DistanceGrabbable

const DistanceGrabbable: Component<{ movementMode: { default: string; enum: { MoveAtSource: string; MoveFromTarget: string; MoveTowardsTarget: string; RotateAtSource: string; }; type: Enum; }; moveSpeed: { default: number; type: Float32; }; returnToOrigin: { default: false; type: Boolean; }; rotate: { default: true; type: Boolean; }; rotateMax: { default: [number, number, number]; type: Vec3; }; rotateMin: { default: [number, number, number]; type: Vec3; }; scale: { default: true; type: Boolean; }; scaleMax: { default: [number, number, number]; type: Vec3; }; scaleMin: { default: [number, number, number]; type: Vec3; }; translate: { default: true; type: Boolean; }; translateMax: { default: [number, number, number]; type: Vec3; }; translateMin: { default: [number, number, number]; type: Vec3; }; }>

Defined in: packages/core/src/grab/distance-grabbable.ts:49

Component for enabling distance‑based object grabbing and manipulation.

Remarks

  • Allows users to grab and manipulate objects from a distance through ray casting.
  • Supports three movement modes: MoveTowardsTarget, MoveAtSource, and RotateAtSource.
  • MoveTowardsTarget: Object smoothly moves toward the input source that's grabbing.
  • MoveAtSource: Object moves relative to hand movement while maintaining distance.
  • RotateAtSource: Object rotates in place without translation or scaling.
  • Optional returnToOrigin makes objects snap back to their original position when released.
  • Supports rotation, translation, and scaling with per‑axis constraints.
  • Works with the GrabSystem to create specialized distance grab handles.
  • Perfect for telekinetic‑style interactions and remote object manipulation.

Examples

ts
entity.addComponent(DistanceGrabbable, {
  movementMode: MovementMode.MoveTowardsTarget,
})
ts
entity.addComponent(DistanceGrabbable, {
  rotate: true,
  translate: true,
  scale: false,
  movementMode: MovementMode.MoveAtSource,
  returnToOrigin: true
})
ts
entity.addComponent(DistanceGrabbable, {
  movementMode: MovementMode.RotateAtSource,
})

See