Skip to main content

Release Notes

v0.11.0

Spectacles Interaction Kit v0.11.0 has several improvements to the kit, including interaction filtering! Please review these release notes before getting started, as these improvements will greatly expand on what you can build for Spectacles!

To update the SIK in your existing project, right-click the SpectaclesInteractionKit package in your Asset Browser and select Pull Update! Please also select the SpectaclesInteractionKit prefab in your Scene Hierarchy and click Revert to ensure your scene has the proper script references.

For more information on updating your SpectaclesInteractionKit package, please review the upgrading documentation.

If you encounter issues updating the Spectacles Interaction Kit, follow the instructions below based on your operating system:

  • Close Lens Studio.
  • Navigate to the folder that contains your Lens Studio project.
  • Delete the Cache folder within that directory.
  • Delete the local global cache folder based on your operating system:

For MacOS :

  • Open the search bar.
  • Enter the folder path ~/Library/Caches/Snap .
  • Delete the specified folder.

For Windows :

  • Open the search bar.
  • Enter the folder path %localappdata%\snap .
  • Delete the specified folder.

Interaction Filtering

To allow a more intuitive transition between interacting with real life objects without needing to take off the Spectacles, the HandInteractor now processes new GestureModule information to block interactions when the user is not interacting with the AR scene.

First, the HandInteractor now consumes GestureModule’s new targetingIntent API, which is designed to detect when the user is not intending to interact with AR content because of typing on a physical keyboard. The new intent processing system will try to detect that typing behavior to block the hands from targeting.

Second, the HandInteractor now consumes GestureModule’s new getIsPhoneInHandBegin/EndEvent to flag when the user is holding a phone, blocking interactions as a result. The TrackedHand class also exposes a new event onPhoneInHandBegin/EndEvent for any devs that need easy access to this information.

Interactor Events

Interactors now fire off their own onTrigger events! This is helpful to detect pinches of the hand even when not targeting a specific Interactable or creating logic common to every interaction regardless of what it is triggering. As a frequently requested feature, we can’t wait to see what clever interactions spawn in from these events, like summoning a button whenever pinching empty space!

Near Field Improvements

Near field interactions have been refined through a multitude of ways, particularly with visuals, poke, and near field InteractionPlanes / ContainerFrames. First, HandVisuals have been modified to make it easier for the user to understand where their hand is relative to the near field UI. Second, the HandInteractor has improved the logic of detecting false pokes to avoid accidental triggers, while Interactable also exposes a new enablePokeDirectionality API to allow Interactables to only accept poke from certain directions! Lastly, the cursor has been disabled during near field interactions for better clarity with the closer visuals. Near field interaction improvements will be a continued focus, so we can’t wait to see new experiences using near field UI!

Core Updates

HandInteractor

  • Now forced into physical targeting (poke, direct pinch) when interacting in close proximity to an InteractionPlane.
  • Improved the calculation of interactionStrength when poking Interactables to be more granular (rather than just 0 or 1).
  • Now modified to always process GestureModule’s targeting intent to block indirect raycast interactions.
  • Now modified to block interactions while holding a phone.
    • Also fires onPhoneInHandBegin/End when detecting the phone in hand.

HandVisuals

  • Adjusted parameters for better visibility during far field and palm interactions.
  • Fixed an issue with compression that caused distorted visuals in certain edge cases.
  • Fixed an issue with the hand menu persisting when calibrating the Mobile Controller.

Interactable

  • Added poke directionality APIs: enablePokeDirectionality, acceptableXDirections, acceptableYDirections, acceptableZDirections.
    • When enabled and set to a targeting mode that includes TargetingMode.Poke, the Interactable can only be poked from the given directions.

Interactor

  • Added events onTriggerStart/Update/End/Cancel to enable devs to listen directly to the Interactor for triggers that aren’t necessarily targeting Interactables.
  • Moved release logic to be handled in BaseInteractor rather than subclasses.
  • Blocked TargetProviders from targeting objects outside of FoV.
  • Fixed an issue where TargetProviders could not target child Interactables of a ScrollView / ContainerFrame if behind the parent object.
  • Fixed an issue where planecastPoint would return null when in physical proximity to the Interactable.

Interaction Updates

InteractionPlane

  • Added an inner targeting zone that causes HandInteractor to only use physical targeting (poke, direct pinch).
  • Fixed a potential race condition by registering / deregistering the InteractionPlane when enabled / disabled.

InteractorCursor

  • Now modified to hide the cursor during near field interactions with the ContainerFrame.

UI Updates

ContainerFrame

  • Exposed APIs showFollowButton and showCloseButton to programmatically show/hide the buttons.
  • Exposed API enableCutout(isEnabled) to programmatically show/hide the inner cutout.
  • Fixed an issue with destroying snappable ContainerFrames from improper teardown.
  • Fixed an issue where snapping was prevented due to a null reference.
  • Fixed an issue where scaling the frame quickly when near the min/max side would reject the scaling.
  • Fixed an issue where calling enableClose/FollowButton would not also show/hide the button.
  • Made the Follow button pokeable by default.

ScrollView

  • Fixed an issue where onFocusEnter/Exit was being invoked too many times when using multiple Interactors.
  • Fixed an issue where cursors would sometimes stick incorrectly when using multiple Interactors.

PinchButton

  • Fixed an issue where PinchButton was catching errors without logging them; callback functions now correctly throw errors.

Helper Updates

InteractableAudioFeedback

  • Enabled programmatic instantiation of InteractableAudioFeedback instead of needing to create in Scene Hierarchy before runtime.

Miscellaneous Changes

setTimeout

  • Moved setTimeout from debounce.ts to FunctionTimingUtils.ts.

Logs

  • Added Info level logs for GestureModule events

v0.10.0

Spectacles Interaction Kit v0.10.0 has several improvements to the kit, including a new near field interaction paradigm! Please review these release notes before getting started, as these improvements will greatly expand on what you can build for Spectacles!

To update the SIK in your existing project, you will need to open your project using Lens Studio v5.4! Then, right-click the SpectaclesInteractionKit package in your Asset Browser and select Pull Update! Please also select the SpectaclesInteractionKit prefab in your Scene Hierarchy and click Revert to ensure your scene has the proper script references.

For more information on updating your SpectaclesInteractionkit package, please review the updating documentation.

Near Field Interactions

To better support near field interactions (where the hand is in physical proximity to Interactables rather than raycasting) of 2.5D UI, SIK now has the InteractionPlane that enhances the targeting capabilities of any HandInteractors in front of it! While this component is in early development, you can consume these enhancements by placing your UI in a ContainerFrame and setting Container.enableInteractionPlane = true either through the Inspector or through script! The InteractionPlane adjusts the raycast of the HandInteractor to be much more comfortable to target nearby UI precisely while also displaying our new HandVisuals to help with depth perception.

HandVisuals Update

SIK’s default HandVisuals has been updated to better help the user understand the position of their hand, particularly with depth! Users should be able to see their hand in relation to any 2.5D UI’s that use the ContainerFrame (with enableInteractionPlane = true) much easier, while also providing some extra data like if the user’s hand is about to pass through an Interactable entirely!

These new visuals have also improved SIK’s hand occlusion when in proximity to Interactables. If you would like the hand visuals to only consist of an occluder (instead of also providing hints via glow), you can set HandVisuals.selectVisual = “Occluder” via Inspector!

Targeting Intent

As an experimental behavior, developers can now enable HandInteractor.filterBasedOnIntent = true via Inspector to enable a new intent processing flag to block interactions when the hand might not be targeting those elements. One such use case is if the user is typing on a laptop while wearing the device; the new intent processing system will try to detect that typing behavior to block the hands from targeting. Other future use cases include blocking interactions while using the phone, etc.

While this intent processing is still in development, this behavior will be off by default until enabled manually! Feel free to try this new system out or keep your SIK as-is!

Core Updates

HandInteractor

  • Added support for near field interactions that use the InteractionPlane
    • Introduced API currentInteractionPlane that returns the closest InteractionPlane whose zone contains the hand
    • Introduced API isFarField that returns true if the hand is not in any InteractionPlane’s zone
    • Adjusted the hand’s raycast to target objects easier whenever the hand is inside an InteractionPlane’s zone
  • Added experimental API filterBasedOnTargetingIntent that enables experimental behavior to filter out interactions if the hand is interacting with the real world (typing on keyboard, using phone)

InteractionManager

  • Added API getInteractionPlanes that returns a reference to all InteractionPlanes in the scene

Interaction Updates

Billboard

  • Fixed a gimbal lock issue that would cause infinite rotations

HandVisuals

  • Updated the shader material for a stronger finger tip outline and glow
  • Now always activated during near field interactions with InteractionPlane

InteractionPlane

  • Introduced the InteractionPlane component which can automatically be used to improve ContainerFrame interactions
  • Added APIs planeSize and proximityDistance to define the bounds of an ‘interaction zone’ in front of an Interactable
  • Added API projectPoint to project a point in world space onto the closest point on the plane defined by the InteractionPlane’s normal and origin position

UI Updates

ContainerFrame

  • Added API enableInteractionPlane that instantiates an InteractionPlane when set to true to improve near field interactions (when the hand is in within ~30cm of the ContainerFrame)

v0.9.0

Spectacles Interaction Kit v0.9.0 has several improvements to the kit, including an all-new example scene! Please review these release notes before getting started, as these improvements will greatly expand on what you can build for Spectacles!

To update the SIK in your existing project, right-click the SpectaclesInteractionKit package in your Asset Browser and select Pull Update!

Sample Scene: Rocket Workshop

As the main feature of SIK v0.9.0, SIK now comes with a reworked example scene! SIK has split into two main prefabs: SpectaclesInteractionKit.prefab for components that handle interactions (e.g. Interactors and Cursors), and SIK Examples.prefab for examples on how to use SIK to build an effective UI!

Check out the new examples for setting up more complex components such as ContainerFrame and ScrollView!

This division of the original SIK prefab into core interaction components and examples will also allow for a smoother update process in the future. As a one-time process, we recommend deleting the SpectaclesInteractionKit prefab in your Scene Hierarchy before updating your SIK to v0.9.0, then re-dragging the SpectaclesInteractionKit prefab back into your Scene Hierarchy.

Core Updates

HandInteractor

  • Changed dragVector to return vec3.zero() whenever the hand goes from out of FoV to in FoV, preventing noisy drag updates

InteractionManager

  • Added getInteractablesThatTarget which returns all Interactables that can be targeting by a given type
    • e.g. getInteractablesThatTarget(TargetingMode.Poke) would return all Interactables of TargetingMode.Poke or TargetingMode.All
  • Deprecated getInteractablesByTargetingMode in favor of getInteractablesThatTarget

Interactor

  • Changed TargetingMode.All to also include poke targeting ( previously only Indirect & Direct targeting)

Interaction Updates

Billboard

  • Deprecated the redundant duration property for cleaner usage

InteractableManipulation

  • Fixed an issue where disabled Interactors could still manipulate the SceneObject

InteractorCursor

  • Renamed enableCursorSnapping to enableCursorHolding for more accurate naming

UI Updates

ContainerFrame

  • Fixed snapping issues
  • Fixed an issue with deleting the ContainerFrame’s HoverBehavior
  • Fixed an issue with mishandling the cursor visual when interacting with the ContainerFrame
  • Removed redundant / deprecated input parameters and API
  • Improved the look of the ContainerFrame’s content by adding a cutout of the background
  • Updated the resizing algorithm for smoother usage

ScrollBar

  • Refactored initialization to avoid a crash on enable

ScrollView

  • Improved the scroll interaction by filtering noise at the end of the drag
  • Refactored initialization to avoid a crash on enable

Helper Updates

InteractableAudioFeedback

  • Updated the default .mp3 assets for trigger start / end

InteractableColorFeedback

  • Fixed callback logic to display the proper interaction feedback

Provider Updates

CameraProvider

  • Fixed an issue where the camera component being disabled would cause unexpected behavior

HandVisuals

  • Improved start up time via lazy instantiation
  • Exposed initialize to allow developers to instantiate the visuals at-will

TrackedHand

  • Added a wrist Keypoint to allPoints
  • Fixed hand tracking calculations to operate in world space to prevent scene hierarchy issues

General Updates

Documentation

  • Added TSDocs to all components for better class documentation

Logging

  • Added a log to print the exact SIK version in the console on lens start

Material Improvements

  • Fixed frustrum culling in many SIK assets to improve visibility and power consumption

Package Metadata

  • Added a link to documentation in the package’s description in Asset Browser / Inspector
  • Added preliminary setup steps in the package’s description in Asset Browser / Inspector
Was this page helpful?
Yes
No