Develop
Develop
Select your platform

Interaction SDK feature overview

Updated: Jun 25, 2025

Overview

Interaction SDK is a device agnostic input system that converts raw controller and hand inputs into generic pointer events. As of v0.8.0, it has replaced InputSystem as the default system that generates input, hover and click events.
With Interaction SDK, you can:
  • Use either your hand or controller’s ray or pinch interaction to grab 3D meshes or flat panels.
  • Interact with panels by touching them directly. Hand and controller meshes are prevented from penetrating panels to make poking feel more natural.
Demonstrating grabbing a panel directly and scrolling, and then using the hand’s ray interaction to transform an object.

How to use Interaction SDK

Interaction SDK is enabled by default in any project that uses the VRFeature.
Panels and meshes can be configured to move, rotate and scale by adding the Grabbable component. For more information about grabbables, see Grabbables in Interaction SDK.
Pointer events are the primary way to listen to input. See Input events for more information on how to listen to input events on scene objects, or entities.

How to disable Interaction SDK

While Interaction SDK provides a device agnostic model for handling input, it does not suit some advanced use cases. To opt-out of InteractionSDK and use the controller-centric InputSystem, set the inputSystemType property on VRFeature that is created in the registerFeatures method of your AppSystemActivity:
VRFeature(this, inputSystemType = VrInputSystemType.SIMPLE_CONTROLLER)

Unique components

Interaction SDK operates on its own set of components, listed below. With the exception of IsdkGrabConstraints, these components are not visible within the Spatial Editor as they are added automatically by ISDK systems.

Panels

  • IsdkCurvedPanel
  • IsdkPanelDimensions
  • IsdkPanelGrabHandle

Grabbing items

  • IsdkGrabbable
  • IsdkGrabConstraints
  • IsdkBoxCollider
  • IsdkSphereCollider

Interaction SDK lifecycle

Each app frame, the IsdkSystem ticks the native library. This involves:
  1. Reading raw input from OpenXR input devices (hands and controllers).
  2. Reading Interaction SDK component changes from the ECS data model to add, update, or delete internal interactables.
  3. Using physics to determine hit info between input devices and interactables.
  4. Resolving any conflicts between interactions (for example, when multiple interactables are close together, which is grabbed?).
  5. Modifying the ECS data model of interactable entities with any positional updates (for example, grab transforms).
  6. Modifying the ECS data model of device visual entities (the hand or controller mesh) to apply touch limiting.
  7. Generating a list of PointerEvents and broadcasting to InputListeners (raw events through onPointerEvent, and backwards compatible events through onInput).

Known limitations

  • Curved panels cannot be grabbed and transformed.
  • Entities that have a Grabbable or IsdkGrabbable component will no longer receive onClick events unless they also have an IsdkPanelDimensions component. To work around this, listen to button presses in the onInput callback.
  • Interaction SDK can only be disabled at app launch, not conditionally at runtime.
Did you find this page helpful?
Thumbs up icon
Thumbs down icon