Class: GrabSystem
Defined in: packages/core/src/grab/grab-system.ts:51
Manages interactive object grabbing and manipulation for VR/AR experiences.
Remarks
- Uses the
@pmndrs/handle
library for precise multitouch manipulation. - Automatically creates handle instances for entities with grabbable components.
- Supports three types of grab interactions: one‑hand, two‑hand, and distance grabbing.
- Automatically cleans up handle instances when grabbable components are removed.
Examples
// Add to your world to enable grab interactions
world.addSystem(GrabSystem)
// Create a grabbable box
const box = world.createEntity()
box.addComponent(OneHandGrabbable, {})
// Create an object that can be scaled with two hands
const sculpture = world.createEntity()
sculpture.addComponent(TwoHandsGrabbable, {
scaleMin: [0.5, 0.5, 0.5],
scaleMax: [3, 3, 3]
})
See
Extends
System
<SystemSchema
, {distanceGrabbables
: {required
: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
; }; }>[]; };handles
: {required
:Component
<{instance
: {default
:any
;type
:Object
; }; }>[]; };oneHandGrabbables
: {required
:Component
<{rotate
: {default
:true
;type
:Boolean
; };rotateMax
: {default
: [number
,number
,number
];type
:Vec3
; };rotateMin
: {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
; }; }>[]; };twoHandsGrabbables
: {required
:Component
<{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
; }; }>[]; }; },this
>
Constructors
Constructor
new GrabSystem(
_w
,_qm
,_p
):GrabSystem
Defined in: node_modules/.pnpm/elics@3.3.0/node_modules/elics/lib/system.d.ts:73
Parameters
_w
_qm
QueryManager
_p
number
Returns
GrabSystem
Inherited from
createSystem({ oneHandGrabbables: { required: [OneHandGrabbable], }, twoHandsGrabbables: { required: [TwoHandsGrabbable], }, distanceGrabbables: { required: [DistanceGrabbable], }, handles: { required: [Handle], }, }).constructor
Properties
camera
readonly
camera:PerspectiveCamera
Defined in: packages/core/src/ecs/system.ts:60
Inherited from
cleanupFuncs
readonly
cleanupFuncs: () =>void
[]
Defined in: packages/core/src/ecs/system.ts:63
Returns
void
Inherited from
config
config:
SystemConfigSignals
<S
>
Defined in: packages/core/src/ecs/system.ts:48
Inherited from
createEntity()
createEntity: () =>
Entity
Defined in: packages/core/src/ecs/system.ts:69
Returns
Entity
Inherited from
globals
globals:
Record
<string
,any
>
Defined in: packages/core/src/ecs/system.ts:53
Inherited from
input
readonly
input:XRInputManager
Defined in: packages/core/src/ecs/system.ts:58
Inherited from
isPaused
isPaused:
boolean
Defined in: packages/core/src/ecs/system.ts:47
Inherited from
player
readonly
player:XROrigin
Defined in: packages/core/src/ecs/system.ts:57
Inherited from
priority
priority:
number
Defined in: packages/core/src/ecs/system.ts:52
Inherited from
queries
queries:
Record
<keyofQ
,Query
>
Defined in: packages/core/src/ecs/system.ts:49
Inherited from
queryManager
queryManager:
QueryManager
Defined in: packages/core/src/ecs/system.ts:51
Inherited from
renderer
readonly
renderer:WebGLRenderer
Defined in: packages/core/src/ecs/system.ts:61
Inherited from
scene
readonly
scene:Scene
Defined in: packages/core/src/ecs/system.ts:59
Inherited from
visibilityState
readonly
visibilityState:Signal
<VisibilityState
>
Defined in: packages/core/src/ecs/system.ts:62
Inherited from
world
world:
World
Defined in: packages/core/src/ecs/system.ts:50
Inherited from
xrFrame
xrFrame:
XRFrame
Defined in: packages/core/src/ecs/system.ts:55
Inherited from
xrManager
xrManager:
WebXRManager
Defined in: packages/core/src/ecs/system.ts:54
Inherited from
Methods
init()
init():
void
Defined in: packages/core/src/grab/grab-system.ts:65
Returns
void
Overrides
play()
play():
void
Defined in: packages/core/src/ecs/system.ts:67
Returns
void
Inherited from
stop()
stop():
void
Defined in: packages/core/src/ecs/system.ts:68
Returns
void
Inherited from
update()
update(
delta
):void
Defined in: packages/core/src/grab/grab-system.ts:113
Parameters
delta
number
Returns
void