Skip to content

Interaction Traits

Part of the HoloScript Traits reference. Browse: Physics · AI & Behavior · Audio · All Traits

Interaction Traits

@grabbable

Category: Interaction Tags: physics, hands, grab, movement

Hand-based grab interactions for VR objects.

hsplus
object Ball @grabbable {
  geometry: 'sphere'
}

object Ball @grabbable(grab_distance: 0.5, require_trigger: true) {
  geometry: 'sphere'
}
ConfigTypeDefaultDescription
grab_distancenumber0.3Maximum grab distance in meters
require_triggerbooleantrueRequire trigger press to grab
allow_remote_grabbooleanfalseAllow grabbing from distance
highlight_on_hoverbooleantrueVisual feedback on hover
two_hand_modestring'average''average', 'dominant', 'scale'

Events:

  • grab_start - Object grabbed
  • grab_end - Object released
  • grab_switch_hand - Transferred between hands

@throwable

Category: Interaction Tags: physics, throw, velocity, ballistic

Physics-based throwing when released from grab.

hsplus
object Ball @grabbable @throwable {
  geometry: 'sphere'
}

object Ball @throwable(velocity_multiplier: 1.5, spin_enabled: true) {
  geometry: 'sphere'
}
ConfigTypeDefaultDescription
velocity_multipliernumber1.0Throw velocity scale
max_velocitynumber20.0Maximum throw speed
spin_enabledbooleantrueAllow spin on release
angular_velocity_scalenumber1.0Rotation speed scale

Events:

  • throw_start - Object thrown with velocity data
  • throw_end - Object stopped moving

@pointable

Laser pointer/ray interaction.

hsplus
object Button @pointable {
  geometry: 'cube'

  onPoint: {
    self.color = 'green'
  }
}
ConfigTypeDefaultDescription
pointer_distancenumber10.0Max raycast distance
highlight_colorstring'#00ff00'Hover highlight color
cursor_typestring'dot''dot', 'ring', 'arrow'

Events:

  • point_enter - Pointer enters object
  • point_exit - Pointer leaves object
  • point_click - Pointer activated on object

@hoverable

Hover state and visual feedback.

hsplus
object MenuItem @hoverable {
  geometry: 'plane'

  onHoverEnter: { self.scale *= 1.1 }
  onHoverExit: { self.scale /= 1.1 }
}
ConfigTypeDefaultDescription
hover_scalenumber1.0Scale change on hover
hover_colorstringnullColor change on hover
hover_soundstringnullSound to play on hover

Events:

  • hover_enter - Pointer/hand enters
  • hover_exit - Pointer/hand exits

@draggable

Continuous drag movement on surfaces.

hsplus
object Slider @draggable(constrain_axis: 'x') {
  geometry: 'cube'
}
ConfigTypeDefaultDescription
constrain_axisstringnull'x', 'y', 'z', or null for free
surface_onlybooleanfalseConstrain to surface
snap_to_gridnumber0Grid snap size (0 = off)

Events:

  • drag_start - Drag initiated
  • drag_move - Position updated
  • drag_end - Drag released

@scalable

Two-handed scaling gestures.

hsplus
object Model @grabbable @scalable {
  geometry: 'model/object.glb'
}

object Model @scalable(min_scale: 0.5, max_scale: 3.0) {
  geometry: 'model/object.glb'
}
ConfigTypeDefaultDescription
min_scalenumber0.1Minimum scale limit
max_scalenumber10.0Maximum scale limit
uniform_scalebooleantrueScale all axes equally

Events:

  • scale_start - Scaling gesture started
  • scale_change - Scale value changed
  • scale_end - Scaling gesture ended

See Also

Released under the MIT License.