Variable: DistanceGrabbable
constDistanceGrabbable:Component<{detachOnGrab: {default:false;type:Boolean; };movementMode: {default:string;enum: {MoveAtSource:string;MoveFromTarget:string;MoveTowardsTarget:string;RotateAtSource:string; };type:Enum; };moveSpeedFactor: {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; };targetPositionOffset: {default: [number,number,number];type:Vec3; };targetQuaternionOffset: {default: [number,number,number,number];type:Vec4; };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:66
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
returnToOriginmakes objects snap back to their original position when released. - Supports rotation, translation, and scaling with per‑axis constraints.
- Configure target position and rotation offsets relative to the input source for MoveTowardsTarget mode.
- Works with the GrabSystem to create specialized distance grab handles.
- Perfect for telekinetic‑style interactions and remote object manipulation.
Examples
entity.addComponent(DistanceGrabbable, {
movementMode: MovementMode.MoveTowardsTarget,
})entity.addComponent(DistanceGrabbable, {
rotate: true,
translate: true,
scale: false,
movementMode: MovementMode.MoveAtSource,
returnToOrigin: true
})entity.addComponent(DistanceGrabbable, {
movementMode: MovementMode.RotateAtSource,
})entity.addComponent(DistanceGrabbable, {
movementMode: MovementMode.MoveTowardsTarget,
targetPositionOffset: [0, 0, -0.3], // 0.3m forward in controller space
targetQuaternionOffset: [0, 0, 0, 1], // no rotation offset
})