Skip to content

Interaction System ​

The app currently supports 3 different types of interaction techniques:

  • Using controllers with raycast
  • Using hands with raycast
  • Using hands with direct touch

The interaction system, like the Event System, is heavily inspired by the interaction system in browsers. Interaction Events can be broken down into 2 categories, Pointer Events initiated by a raycast and Touch Events initiated by a collision shape in the tip of the fingers. Pointer Events](/reference/EventPointer.html)

Pointer Events ​

When pressing the trigger button on the back of a controller or doing a pinch gesture with thumb and index finer an on_press_down event is triggered containing a EventPointer which holds information about the ray and initiator of the event. If the trigger button or pinch gesture is released before 400ms pass, an on_press_up and on_click event is triggered. If the trigger button or pinch gesture is held for more than 400ms, an on_press_move event is triggered each physics process and when releasing, only the on_press_up event is triggered.

Event Order

The same logic can be applied to grab (on_grab_down, on_grab_move and on_grab_up) events, here the event family is triggered by the grip button on the controller or by doing a pinch gesture with thumb and middle finger.

Pinch Gesture ​

The pinch gesture is implemented by checking the distance between the thumb and each finger and if the distance is smaller than 3cm, the pinch gesture is detected.

Touch Events ​

Touch events are triggered when the collision shape present in the tip of the fingers enters another collision area. The on_touch_enter event is triggered when the collision shape enters the area, the on_touch_move event is triggered each physics process while the collision shape is inside the area and the on_touch_leave event is triggered when the collision shape leaves the area.

Touch Event Order

Hover (ray) Events ​

Each frame the ray is casted from the controller or hand and in case that the ray collides with a collision node, the on_ray_enter event is triggered. If the ray was already colliding with another object the previous frame, the on_ray_leave event is triggered on the old node.