Spectacles Interaction Kit (SIK)
SIK is the canonical way to wire interactions on Spectacles. The architecture is three classes — Interactor, Interactable, InteractionManager — and a handful of UI prefabs. Once the model clicks, everything from pinch buttons to two-handed scaling falls into the same shape.
When to load
Triggers:
- "Why isn't my pinch button firing on Spectacles"
- "AR draggable Spectacles"
- "Two-handed scale on Spectacles"
- "Custom interactor SIK"
- "PinchButton trigger event"
- "Spectacles raycast interaction"
- "Spectacles cursor"
Don't load for:
- General Lens Studio basics — see [[../snap-spectacles-build/SKILL]].
- Multiplayer / shared interactions — see [[../snap-spectacles-sync/SKILL]].
- Mobile controller pairing for non-interaction reasons — see [[../snap-spectacles-mobile-kit/SKILL]].
Decide first
The architecture decisions before code:
- Near or far? Direct-pinch is near (~5 cm from the Interactable's collider). Far interaction needs the cursor / gaze-driven ray. See [[references/hand-interactor]] and [[references/cursor-interactor]].
- One hand or two? Two-handed manipulation is supported but requires
InteractableManipulationconfigured for two-handed. See [[references/manipulation]]. - UI element source. Build with SIK / UI Kit prefabs (Button, Toggle, Slider, Container) or write your own Interactable? Prefer prefabs first.
- Bubble-or-trickle. SIK fires events down the scene-graph tree from ancestors to targets and back up — what catches the event? See [[references/event-cascading]].
Map of content
Architecture
- [[references/interaction-manager]] — the central manager and the bubble/trickle event flow.
- [[references/event-cascading]] — how events propagate through ancestor Interactables.
Interactors (input)
- [[references/hand-interactor]] — direct-pinch and direct-poke; the near-field gesture model.
- [[references/cursor-interactor]] — gaze-driven cursor for far interaction.
- [[references/mobile-interactor]] — smartphone-as-controller, calibrated with Spectacles.
- [[references/hand-visualization]] — visualising the user's hands in scene.
Interactables (targets)
- [[references/interactables]] — Interactable component, collider requirements, states (hover, trigger).
- [[references/manipulation]] — InteractableManipulation: translate, scale, rotate, two-handed.
- [[references/anchor-dynamics]] — anchor / pinning so UI stays where the user puts it.
UI prefabs (composition)
- [[references/ui-buttons]] — Button / PinchButton patterns and where the click really lands.
- [[references/ui-toggles]] — Toggle component, state binding, accessibility.
- [[references/ui-sliders]] — Slider and ScrollBar; the continuous-value pattern.
- [[references/ui-containers]] — Container and ContainerFrame as the scene's UI organiser.
Custom
- [[references/custom-interactor]] — when prefabs aren't enough; writing your own.
Verify
Before claiming an interaction works:
- Every Interactable has a Collider component sized for the target gesture.
- Exactly one InteractionManager exists in the scene.
- Hand-interactor and cursor-interactor (if both present) don't fight for the same Interactable — use raycast layers or priority.
- Direct-pinch works within the Interactable's collider (≈5 cm range).
- Event subscriptions are bound in
onAwake/onStartand unbound inonDestroy/onDisable. - Tested with the actual hand pose, not just the editor mouse.
- Two-handed manipulation (if used) is tested with both hands tracking.
- The interaction is glanceable — see [[../../meta/meta-display-design/references/glanceable-principle]].
Smoke test
If this skill loaded correctly, the agent should answer:
- Why does an Interactable need a Collider component to receive events? (Expected: the Interactor raycasts against collider geometry; without a collider it can never be a hit; cites [[references/interactables]].)
- What's the difference between direct-pinch and indirect-pinch? (Expected: direct-pinch fires within ~5 cm of the Interactable's collider; indirect routes through a raycast / cursor; cites [[references/hand-interactor]] and [[references/cursor-interactor]].)
- Three reasons a pinch event might not fire on a properly-shaped Interactable. (Expected: collider too small / offset; no InteractionManager in scene; another Interactable ancestor is consuming the event in its bubble phase. Cites [[references/interactables]], [[references/interaction-manager]], [[references/event-cascading]].)
Sibling skills
- [[../snap-spectacles-build/SKILL]] — the Lens Studio basics this skill assumes.
- [[../snap-spectacles-sync/SKILL]] — for multi-user / networked interactions.
- [[../snap-spectacles-design/SKILL]] — the UX layer on top of these mechanics.
Sources
- SIK getting started — https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/get-started
- SIK architecture — https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/architecture
- SIK features overview — https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/features/overview
- Interaction system — https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/features/interactionsystem
- SIK release notes — https://developers.snap.com/spectacles/spectacles-frameworks/spectacles-interaction-kit/release-notes
- Sample projects — https://github.com/specs-devs/samples