<?xml version="1.0"?>
<oembed><version>1.0</version><provider_name>Geckode!</provider_name><provider_url>https://www.youbiquo.eu/geckode</provider_url><author_name>Aida Garfami</author_name><author_url>https://www.youbiquo.eu/geckode/author/aida-garfami/</author_url><title>Interaction Package Guides - Geckode!</title><type>rich</type><width>600</width><height>338</height><html>&lt;blockquote class="wp-embedded-content" data-secret="liC35CUVj1"&gt;&lt;a href="https://www.youbiquo.eu/geckode/en/interaction-package-guides/"&gt;Interaction Package Guides&lt;/a&gt;&lt;/blockquote&gt;&lt;iframe sandbox="allow-scripts" security="restricted" src="https://www.youbiquo.eu/geckode/en/interaction-package-guides/embed/#?secret=liC35CUVj1" width="600" height="338" title="&#x201C;Interaction Package Guides&#x201D; &#x2014; Geckode!" data-secret="liC35CUVj1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" class="wp-embedded-content"&gt;&lt;/iframe&gt;&lt;script&gt;
/*! This file is auto-generated */
!function(d,l){"use strict";l.querySelector&amp;&amp;d.addEventListener&amp;&amp;"undefined"!=typeof URL&amp;&amp;(d.wp=d.wp||{},d.wp.receiveEmbedMessage||(d.wp.receiveEmbedMessage=function(e){var t=e.data;if((t||t.secret||t.message||t.value)&amp;&amp;!/[^a-zA-Z0-9]/.test(t.secret)){for(var s,r,n,a=l.querySelectorAll('iframe[data-secret="'+t.secret+'"]'),o=l.querySelectorAll('blockquote[data-secret="'+t.secret+'"]'),c=new RegExp("^https?:$","i"),i=0;i&lt;o.length;i++)o[i].style.display="none";for(i=0;i&lt;a.length;i++)s=a[i],e.source===s.contentWindow&amp;&amp;(s.removeAttribute("style"),"height"===t.message?(1e3&lt;(r=parseInt(t.value,10))?r=1e3:~~r&lt;200&amp;&amp;(r=200),s.height=r):"link"===t.message&amp;&amp;(r=new URL(s.getAttribute("src")),n=new URL(t.value),c.test(n.protocol))&amp;&amp;n.host===r.host&amp;&amp;l.activeElement===s&amp;&amp;(d.top.location.href=t.value))}},d.addEventListener("message",d.wp.receiveEmbedMessage,!1),l.addEventListener("DOMContentLoaded",function(){for(var e,t,s=l.querySelectorAll("iframe.wp-embedded-content"),r=0;r&lt;s.length;r++)(t=(e=s[r]).getAttribute("data-secret"))||(t=Math.random().toString(36).substring(2,12),e.src+="#?secret="+t,e.setAttribute("data-secret",t)),e.contentWindow.postMessage({message:"ready",secret:t},"*")},!1)))}(window,document);
//# sourceURL=https://www.youbiquo.eu/geckode/wp-includes/js/wp-embed.min.js
&lt;/script&gt;
</html><description>Interaction Package Guide Interaction Package Guide &#x2014; LeonardoXR SDK Interaction Package Guides Version 1.0.2 Device: Youbiquo Leonardo XR Base SDK: Snapdragon Spaces 1.0.4 This guide describes how to configure the interaction layer for LeonardoXR applications using standard Unity packages: XR Interaction Toolkit (XRIT) 3.3.0&#xA0;&#x2014; high-level interaction system for controllers, ray interactors and direct interactors. XR Hands 1.7.2&#xA0;&#x2014; access to hand joint data and gesture recognition. Dependencies and Versions Package Version Source XR Interaction Toolkit 3.3.0 Unity Registry XR Hands 1.7.2 Unity Registry AR Foundation 6.2.1 Unity Registry Snapdragon Spaces SDK 1.0.4 Tarball (Qualcomm) LeonardoXR SDK 1.0.2 Tarball (Youbiquo) UniTask 2.5.10 Unity Registry NOTE&#xA0;All dependencies must be installed as described in the Getting Started guide before proceeding with interaction configuration. 1. XR Interaction Toolkit Configuration Installation Install via&#xA0;Window &gt; Package Manager &gt; Unity Registry &gt; XR Interaction Toolkit &gt; Install&#xA0;(version 3.3.0). If prompted &#x201C;Enable the new input system?&#x201D;, click&#xA0;Yes. If prompted &#x201C;XR Interaction Layer Mask Update Required&#x201D;, click&#xA0;I Made a Backup, Go Ahead!&#xA0;(for new projects) or&#xA0;No Thanks&#xA0;if no previous XRIT version was present. Import Starter Assets Open&#xA0;Window &gt; Package Manager, select&#xA0;In Project&#xA0;then&#xA0;XR Interaction Toolkit. Under&#xA0;Samples, click&#xA0;Import&#xA0;on&#xA0;Starter Assets. Also click&#xA0;Import&#xA0;on&#xA0;Hand Interaction Demo&#xA0;(required for hand tracking samples). The Starter Assets include: Pre-configured Input Action Asset for XR controllers and hands. Reference prefabs for XR Origin with Ray Interactor and Direct Interactor. Base materials and shaders for interaction visual feedback. Configure Input Actions After import, an&#xA0;XRI Default Input Actions&#xA0;asset is added to&#xA0;Assets/Samples/XR Interaction Toolkit/[version]/Starter Assets/. This asset is pre-configured for standard controller profiles (including the Companion Controller via Microsoft MMRC Profile) and for hands. To associate the asset with the system: go to&#xA0;Edit &gt; Project Settings &gt; XR Plug-in Management &gt; Input System&#xA0;and ensure&#xA0;Active Input Handling&#xA0;is set to&#xA0;Both&#xA0;or&#xA0;Input System Package (New). 2. Scene Configuration &#x2014; XR Origin Base Scene Hierarchy AR Session XR Origin (Action-based) &#x2514;&#x2500;&#x2500; Camera Offset &#x251C;&#x2500;&#x2500; Main Camera (tagged "MainCamera") &#x251C;&#x2500;&#x2500; LeftHand Controller &#x2502; &#x251C;&#x2500;&#x2500; XR Ray Interactor (left) &#x2502; &#x2514;&#x2500;&#x2500; XR Direct Interactor (left) &#x2514;&#x2500;&#x2500; RightHand Controller &#x251C;&#x2500;&#x2500; XR Ray Interactor (right) &#x2514;&#x2500;&#x2500; XR Direct Interactor (right) Create the base structure by selecting&#xA0;GameObject &gt; XR &gt; XR Origin (Action-based). NOTE&#xA0;Disable&#xA0;AR Camera Background&#xA0;&#x2014; not supported on LeonardoXR and automatically disabled at runtime. Also disable&#xA0;AR Camera Manager&#xA0;if not retrieving RGB frames from the camera. Input Action Manager Add the&#xA0;Input Action Manager&#xA0;component to the XR Origin (or a persistent GameObject). In the&#xA0;Action Assets&#xA0;field, assign: XR Input Actions&#xA0;(from&#xA0;Samples/LeonardoXR SDK/[version]/Core Samples/Shared Assets). 3. XR Hands Configuration Installation Install via&#xA0;Window &gt; Package Manager &gt; Unity Registry &gt; XR Hands &gt; Install&#xA0;(version 1.7.2). Import Hand Samples Open&#xA0;Window &gt; Package Manager &gt; In Project &gt; XR Hands &gt; Samples&#xA0;and import: Gestures&#xA0;&#x2014; gesture recognition system. Hand Visualizer&#xA0;&#x2014; hand mesh visualisation. Enable Hand Tracking Subsystem Go to&#xA0;Edit &gt; Project Settings &gt; XR Plug-in Management &gt; OpenXR&#xA0;(Android tab). Under&#xA0;All Features, enable&#xA0;Hand Tracking Subsystem. Also enable&#xA0;Hand Tracking&#xA0;in the Snapdragon Spaces feature group. NOTE&#xA0;The Hand Tracking Subsystem must be enabled in&#xA0;All Features&#xA0;&#x2014; not just in the Snapdragon Spaces section &#x2014; to work correctly on LeonardoXR. Hand Data Access via XR Hands API using UnityEngine.XR.Hands; XRHandSubsystem handSubsystem = XRHandSubsystemUtility.GetSubsystem(); if (handSubsystem != null) { XRHand leftHand = handSubsystem.leftHand; if (leftHand.isTracked) { if (leftHand.GetJoint(XRHandJointID.IndexTip).TryGetPose(out Pose indexTipPose)) { // indexTipPose.position = position of left index fingertip } } } Gesture Recognition [SerializeField] XRHandGestures gestures; void OnEnable() { gestures.gesturePerformed += OnGesturePerformed; } void OnGesturePerformed(XRHandGesture gesture, Handedness handedness) { Debug.Log($"Gesture: {gesture.gestureName} performed with {handedness}"); } 4. Configuring Interactables Adding an Interactable to an Object Add a&#xA0;Collider&#xA0;to the object (e.g. Box Collider). Add&#xA0;XR Grab Interactable&#xA0;for grabbable objects, or&#xA0;XR Simple Interactable&#xA0;for objects that receive events without being moved. public class MyButton : MonoBehaviour { [SerializeField] XRSimpleInteractable interactable; void OnEnable() { interactable.selectEntered.AddListener(OnSelected); } void OnSelected(SelectEnterEventArgs args) { Debug.Log("Selected by: " + args.interactorObject); } } Interaction Layer Mask XRIT 3.x uses&#xA0;Interaction Layer Masks&#xA0;to filter which interactors can interact with which interactables: interactable.interactionLayers = InteractionLayerMask.GetMask("Default", "UI"); 5. UI Canvas and Interaction World Space Canvas Create a&#xA0;Canvas&#xA0;and set&#xA0;Render Mode&#xA0;to&#xA0;World Space. Add the&#xA0;Tracked Device Graphic Raycaster&#xA0;component to the Canvas (replaces the standard Graphic Raycaster). Add&#xA0;XR UI Input Module&#xA0;to the EventSystem GameObject in the scene (replaces the default Input System UI Input Module). Recommended Canvas Settings Parameter Recommended Value Render Mode World Space Dynamic Pixels Per Unit 1 Reference Pixels Per Unit 100 Scale 0.001 (for a ~1m canvas = 1000 pixel units) 6. Combining Controller and Hand Tracking On LeonardoXR it is not possible to simultaneously use headset Controllers and full Hand Tracking (with raycast from both hands) due to conflicts between OpenXR profiles. Option A &#x2014; Controller Only (Companion Controller) Add&#xA0;Microsoft MMRC Profile&#xA0;to enabled profiles. Do not add Hand Interaction Profile. The Companion Controller handles pointing; hands can be used as colliders but not as raycast interactors. Option B &#x2014; Hands Only (Dual Hand Mode) Add&#xA0;Hand Interaction Profile&#xA0;to enabled profiles. Do not add Microsoft MMRC Profile. Remove the Device Pointer Prefab from the Controller. Both hands tracked as full interactors; no phone input. Option C &#x2014; Controller + One Hand Add&#xA0;Microsoft MMRC Profile&#xA0;to enabled profiles. Keep only the Right Hand Controller active in the XR Origin. The left hand can still function as a collider and poke interaction trigger, but not as a ray interactor. 7. UniTask &#x2014; Asynchronous Operations UniTask 2.5.10 is included as a dependency for high-performance async operations (asset loading, waiting for subsystems, etc.) without GC allocations. using Cysharp.Threading.Tasks; public class HandSubsystemWaiter : MonoBehaviour { async UniTaskVoid Start() { // Wait until the XR Hands subsystem is ready await UniTask.WaitUntil(() =&gt; XRHandSubsystemUtility.GetSubsystem()?.running ?? false); Debug.Log("XR Hands subsystem ready."); } } UniTask is used internally by the LeonardoXR SDK for asynchronous operations. It is recommended to use it in application code as well for consistency with the SDK lifecycle. OpenXR Interaction Profile Reference Profile Use Microsoft Mixed Reality Motion Controller Profile Physical controllers interaction profile Hand Interaction Profile Hand tracking with poke/pinch interactor LeonardoXR Hand Interaction Profile Hand tracking with poke/pinch interactor</description></oembed>
