SuperAPI AI Directory

snap-spectacles-sik

General & other

View repository

Updated 10-15 22:13

About this skill

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:

  1. 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]].
  2. One hand or two? Two-handed manipulation is supported but requires InteractableManipulation configured for two-handed. See [[references/manipulation]].
  3. UI element source. Build with SIK / UI Kit prefabs (Button, Toggle, Slider, Container) or write your own Interactable? Prefer prefabs first.
  4. 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 / onStart and unbound in onDestroy / 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:

  1. 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]].)
  2. 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]].)
  3. 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