<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Meta XR SDK Tutorial]]></title><description><![CDATA[Meta XR SDK Tutorial]]></description><link>https://meta-xr-sdk.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 07:37:47 GMT</lastBuildDate><atom:link href="https://meta-xr-sdk.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Meta XR SDK Installation and Project Setup]]></title><description><![CDATA[0. Contents of This Article
This article introduces project setup methods and SDK installation procedures for developing Meta Quest-compatible applications in Unity. By completing the steps in this article, you will have established the foundation fo...]]></description><link>https://meta-xr-sdk.hashnode.dev/meta-xr-sdk-installation-and-project-setup</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/meta-xr-sdk-installation-and-project-setup</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:43:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333263351/fa8f9bab-7d6a-4534-a938-8f5bd4d9f485.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces project setup methods and SDK installation procedures for developing Meta Quest-compatible applications in Unity. By completing the steps in this article, you will have established the foundation for VR/AR application development using the Meta XR SDK.</p>
<h2 id="heading-1-creating-a-unity-project">1. Creating a Unity Project</h2>
<p><strong>[Creating a New Project]</strong></p>
<ul>
<li>Open Unity Hub and click <strong>New project</strong></li>
<li>Select the Unity version in the New project window<br /><em>This article uses <strong>6000.0.34f</strong>  
</em>Install Android development environment when installing Unity</li>
<li>Select <strong>Universal 3D</strong> from the templates</li>
<li>Set the Project name in Project Settings<br /><em>This article sets it as <em>*MetaXRSDK_Samples</em></em></li>
<li>Click <strong>Create project</strong> to create the project</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/01.jpg?raw=true" alt="Unity Project Creation Screen" /></p>
<p><strong>[Switching to Android Platform]</strong></p>
<ul>
<li>Click <strong>File -&gt; Build Profiles</strong></li>
<li>Select <strong>Android</strong> in the Build Profiles window and click <strong>Switch Platform</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/02.jpg?raw=true" alt="Build Settings Screen" /></p>
<ul>
<li>Click <strong>Scene List</strong> in the left column</li>
<li>Right-click and delete Scenes/SampleScene from the Scene List</li>
<li>Close the Build Settings window</li>
</ul>
<h2 id="heading-2-installing-meta-xr-sdk">2. Installing Meta XR SDK</h2>
<p><strong>[Registering to My Assets on Asset Store]</strong></p>
<ul>
<li>Open the <a target="_blank" href="https://assetstore.unity.com/packages/tools/integration/meta-xr-all-in-one-sdk-269657">Meta XR SDK page</a> on Asset Store and add Meta XR All-in-One SDK to <strong>My Assets</strong><br />*Sign in with your account on the Unity page beforehand</li>
</ul>
<p><strong>[Installation via Package Manager]</strong></p>
<ul>
<li>Return to Unity Editor, click <strong>Window -&gt; Package Manager</strong> to open Package Manager</li>
<li>Click <strong>My Assets</strong> and enter <strong>Meta</strong> in the search window</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/03.jpg?raw=true" alt="Package Manager Screen" /></p>
<ul>
<li>Select <strong>Meta XR All in One SDK</strong> and click <strong>Install</strong><br /><em>If using this asset for the first time, first click <em>*Download</em></em>. Install after SDK download is complete.</li>
<li>After installation, you'll be prompted to restart the Editor, so click <strong>Restart Editor</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/04.jpg?raw=true" alt="Editor Restart Screen" /></p>
<ul>
<li>After restart, the Interaction SDK OpenXR Upgrade window may appear, but ignore and close it for now</li>
</ul>
<h2 id="heading-3-installing-openxr-plugin">3. Installing OpenXR Plugin</h2>
<ul>
<li>After Unity Editor restart, open Package Manager again</li>
<li>Click <strong>Unity Registry</strong> and search for <strong>OpenXR</strong></li>
<li>Install <strong>OpenXR Plugin</strong></li>
<li>A dialog prompting Meta XR Feature Set configuration will appear, so click <strong>Yes</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/05.jpg?raw=true" alt="XRFeature Set" /></p>
<ul>
<li>The Project Settings window will appear but can be ignored for now</li>
</ul>
<h2 id="heading-4-installing-unity-openxr-meta-optional">4. Installing Unity OpenXR Meta (Optional)</h2>
<p>The Unity OpenXR plugin installed in the above steps does not support Depth API occlusion features. If you plan to use Depth API, install Unity OpenXR Meta with the following steps.</p>
<ul>
<li>Open Package Manager</li>
<li>Click <strong>Unity Registry</strong> and search for <strong>OpenXR</strong></li>
<li>Install <strong>Unity OpenXR Meta</strong></li>
</ul>
<h2 id="heading-5-project-configuration">5. Project Configuration</h2>
<p><strong>[Basic Configuration]</strong></p>
<ul>
<li>Close the project once and reopen it just to be safe</li>
<li>If the Interaction SDK OpenXR Upgrade dialog appears, click <strong>Use OpenXR Hand</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/06.jpg?raw=true" alt="Interaction SDK OpenXR Upgrade" /></p>
<p><strong>[XR Plugin Management Configuration]</strong></p>
<ul>
<li>Open <strong>Edit -&gt; Project Settings</strong></li>
<li>Click XR Plugin Management in the Project Settings window</li>
<li>Select the <strong>Android</strong> tab and turn <strong>OpenXR</strong> ON (others should be OFF)</li>
<li>If using Meta Quest Link (PC VR for Windows), also turn <strong>OpenXR</strong> ON from the <strong>Windows</strong> tab</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/07.jpg?raw=true" alt="XR Plugin Settings Screen" /></p>
<p><strong>[Running Project Validation]</strong></p>
<ul>
<li>Click <strong>Project Validation</strong> directly under XR Plugin Management</li>
<li>Open the <strong>Android</strong> tab and click <strong>Fix All</strong> displayed in the tab information<br />*Results may not be reflected immediately after clicking Fix All. In such cases, try opening other items and returning to Project Validation to check again</li>
<li>If using Meta Quest Link, perform the same operation from the <strong>Windows</strong> tab</li>
</ul>
<p><strong>[Meta XR Configuration Verification]</strong></p>
<ul>
<li>Click <strong>Meta XR</strong></li>
<li>Open the <strong>Android</strong> tab and click <strong>Fix All</strong> next to Outstanding Issues</li>
<li>If using Meta Quest Link, perform the same operation from the <strong>Windows</strong> tab</li>
</ul>
<p><strong>[Creating AndroidManifest.xml]</strong></p>
<ul>
<li>Close the Project Settings window</li>
<li>In Unity Editor menu bar, click <strong>Meta -&gt; Tools</strong></li>
<li>Click <strong>Create store-compatible AndroidManifest.xml</strong></li>
<li>If prompted for overwrite permission, click <strong>Replace</strong></li>
</ul>
<h2 id="heading-6-build-settings-optional">6. Build Settings (Optional)</h2>
<p>This operation sets a custom app name (package name). While not mandatory, it's recommended when developing multiple apps.</p>
<p><strong>[App Information Configuration]</strong></p>
<ul>
<li>Open <strong>Edit -&gt; Project Settings</strong></li>
<li>Select <strong>Player</strong></li>
<li>Set <strong>Company Name</strong> and <strong>Product Name</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/08.jpg?raw=true" alt="Player Settings Screen" /></p>
<p><strong>[Package Name Configuration]</strong></p>
<ul>
<li>Select <strong>Android</strong> from the tabs displayed slightly below</li>
<li>Open <strong>Other Settings</strong></li>
<li>Turn <strong>OFF</strong> the Override Default Package Name checkbox in Identification</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/1/09.jpg?raw=true" alt="Android Settings Screen" /></p>
<h2 id="heading-7-next-steps">7. Next Steps</h2>
<p>The basic project configuration is now complete. Next, we'll explain how to display 3D objects in VR.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<h2 id="heading-8-complete-list-of-meta-xr-sdk-articles">8. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Getting Started with Meta XR SDK Quest App Development</a></p>
]]></content:encoded></item><item><title><![CDATA[Displaying Objects in VR with MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This article introduces the steps to display 3D objects (cubes) in VR with Meta Quest. You'll learn the fundamentals of VR applications, from basic camera setup with Meta XR SDK to object placement and testing on actual ha...]]></description><link>https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:42:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333315695/c9a9b2d1-5af4-4145-9318-b45ef05ea5ee.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces the steps to display 3D objects (cubes) in VR with Meta Quest. You'll learn the fundamentals of VR applications, from basic camera setup with Meta XR SDK to object placement and testing on actual hardware.<br />You can also check the operation in the 01-ShowObject scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=eK1VH2kBx1A"><img src="https://img.youtube.com/vi/eK1VH2kBx1A/0.jpg" alt="QuestVR Basic" /></a></p>
<p>This article continues from the following. Please check if your settings match.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/meta-xr-sdk-installation-and-project-setup">Meta XR SDK Installation and Project Setup</a></p>
<h2 id="heading-1-creating-a-scene">1. Creating a Scene</h2>
<p><strong>[Creating a New Scene]</strong></p>
<ul>
<li>Click <strong>File -&gt; New Scene</strong></li>
<li>Select <strong>Basic(URP)</strong> in the New Scene window and click <strong>Create</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/00.jpg?raw=true" alt="New Scene Creation Screen" /></p>
<ul>
<li>Click <strong>File -&gt; Save</strong></li>
<li>Set the scene name and save<br /><em>This article uses <em>*ShowObject</em></em></li>
</ul>
<h2 id="heading-2-setting-up-the-quest-camera">2. Setting Up the Quest Camera</h2>
<p><strong>[Placing the Camera Rig]</strong></p>
<ul>
<li>Delete the <strong>Main Camera</strong> in the Hierarchy</li>
<li>Enter <strong>CameraRig</strong> in the Project tab search area</li>
<li>Select <strong>All</strong> from Search: directly under the search area</li>
<li>Drag and drop <strong>OVRCameraRig</strong> into the Hierarchy</li>
<li>If Project Setup Tool Fix Available appears, click Fix
<img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/00-1.jpg?raw=true" alt="Project Setup Tool Fix" /></li>
</ul>
<p><strong>[OVR Manager Configuration]</strong></p>
<ul>
<li>Click OVRCameraRig in the Hierarchy</li>
<li>Find <strong>OVR Manager</strong> in the Inspector to set detailed information for Quest</li>
<li>Select <strong>Floor Level</strong> for <strong>Tracking Origin Type</strong> in the Tracking item<br />*Tracking Origin Type is important for determining the origin height</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Mode</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Floor Level</strong></td><td>Floor height is the origin</td></tr>
<tr>
<td><strong>Eye Level</strong></td><td>Quest height when the app starts is the origin</td></tr>
</tbody>
</table>
</div><p><em>Select <strong>Floor Level</strong> if you want to fix object display height relative to the room, and select <em>*Eye Level</em></em> if you want to fix objects relative to Quest's initial position.</p>
<h2 id="heading-3-displaying-controllers-and-hands">3. Displaying Controllers and Hands</h2>
<p>This article doesn't introduce interactions with hands or controllers, but these will be used in subsequent articles. Also, it's enjoyable to visually confirm that hands and controllers are recognized by Quest during testing, so I'll introduce the setup procedure.</p>
<p><strong>[Adding Interaction Features]</strong></p>
<ul>
<li>Enter <strong>OVRInteractionComprehensive</strong> in the Project tab search area</li>
<li>Select <strong>All</strong> from Search: directly under the search area</li>
<li>Drag and drop <strong>OVRInteractionComprehensive</strong> into OVRCameraRig as a child element</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/01.jpg?raw=true" alt="OVRInteractionComprehensive" /></p>
<p><strong>[Hand Tracking Configuration]</strong></p>
<ul>
<li>Click OVRCameraRig in the Hierarchy</li>
<li>Find <strong>OVR Manager</strong> in the Inspector to set detailed information for Quest</li>
<li>Find <strong>Hand Tracking Support</strong> in the Quest Features section and select your preferred mode<br /><em>This series assumes <em>*Controllers and Hands</em></em> is selected.</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting Name</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Controllers Only</strong></td><td>Only controllers work, hand tracking is disabled</td></tr>
<tr>
<td><strong>Controllers and Hands</strong></td><td>Both controllers and hand tracking work</td></tr>
<tr>
<td><strong>Hands Only</strong></td><td>Only hand tracking works</td></tr>
</tbody>
</table>
</div><p><br /></p>
<p>  　
<strong>[Always Display Controller Ray (Optional)]</strong><br /><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/01-1.jpg?raw=true" alt="Ray Object" /><br />The Ray object that indicates the controller's pointing direction is not always displayed. Of course, this is fine as is, but if you want the Ray object to always be displayed, you can set it up with the following procedure.</p>
<ul>
<li>Open LeftInteractions child element of OVRInteractionComprehensive</li>
<li>Further open Interactors -&gt; Controller -&gt; ControllerRayInteractor -&gt; Visuals</li>
<li>Click <strong>ControllerRay</strong> child element of Visuals</li>
<li>Pay attention to <strong>Controller Ray Visual</strong> in the Inspector</li>
<li>Turn <strong>OFF</strong> the Hide When No Interactable checkbox</li>
<li>Perform the same operation for <strong>RightInteractions</strong> to set the right hand Ray  </li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/01-2.jpg?raw=true" alt="Ray Object Visibility" /> </p>
<p><br />  </p>
<h2 id="heading-4-object-placement">4. Object Placement</h2>
<p><strong>[Creating a Cube]</strong></p>
<ul>
<li>Right-click in the empty space of the Hierarchy with no other objects selected</li>
<li>Click <strong>3D Object -&gt; Cube</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/02.jpg?raw=true" alt="Cube Creation Screen" /></p>
<p><strong>[Position and Size Adjustment]</strong></p>
<ul>
<li>Click the Cube added to the Hierarchy</li>
<li>Set the Cube's position, rotation, and size in the Transform section of the Inspector<br />*This article uses the following settings to display a slightly tilted 0.3m cube at 1.3m height from the floor, 1m ahead from the origin</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Item</td><td>X</td><td>Y</td><td>Z</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Position</strong></td><td>0</td><td>1.3</td><td>1</td></tr>
<tr>
<td><strong>Rotation</strong></td><td>0</td><td>20</td><td>0</td></tr>
<tr>
<td><strong>Scale</strong></td><td>0.3</td><td>0.3</td><td>0.3</td></tr>
</tbody>
</table>
</div><p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/2/03.jpg?raw=true" alt="Transform Settings Screen" /></p>
<h2 id="heading-5-testing">5. Testing</h2>
<p><strong>[Installing on Actual Device]</strong></p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Click File -&gt; Build Settings in Unity Editor</li>
<li>Click <strong>Build And Run</strong></li>
<li>Set installer (apk) name in alphanumeric characters and save</li>
<li>After installer generation and installation complete, the app automatically starts in Quest</li>
<li>A cube should appear in front of you. If it appears in a different direction, press and hold the <strong>meta (oculus) button</strong> on the right controller to reset orientation</li>
<li>If installation errors occur, review settings or create only the apk with Build and install the app from <a target="_blank" href="https://sidequestvr.com/setup-howto">SideQuest</a> or <a target="_blank" href="https://developer.oculus.com/documentation/unity/ts-odh/?locale=ja_JP">MetaQuestDeveloperHub</a></li>
</ul>
<p><strong>[Using Meta Quest Link (Windows)]</strong></p>
<p>For details, see the <a target="_blank" href="https://www.meta.com/ja-jp/help/quest/articles/headsets-and-accessories/oculus-link/set-up-link/">official page</a>.</p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Start Quest Link in Quest</li>
<li>Click the Play button in Unity Editor</li>
<li>A cube should appear in front of you. If it appears in a different direction, press and hold the <strong>meta (oculus) button</strong> on the right controller to reset orientation</li>
</ul>
<h2 id="heading-6-next-steps">6. Next Steps</h2>
<p>You've now achieved basic object display in VR. Next, we'll explain AR display using the passthrough feature.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-7-complete-list-of-meta-xr-sdk-articles">7. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Getting Started with Meta XR SDK Quest App Development</a></p>
]]></content:encoded></item><item><title><![CDATA[AR Display Using MetaQuest Passthrough Feature]]></title><description><![CDATA[0. Contents of This Article
This article introduces the steps to display 3D objects (cubes) in AR with Meta Quest. You'll learn basic techniques for overlaying virtual objects on the real world, from passthrough feature setup to background transparen...]]></description><link>https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Virtual Reality]]></category><category><![CDATA[Mixed Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:42:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333350893/fd52122b-7c16-434e-87e6-7f84ae943664.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces the steps to display 3D objects (cubes) in AR with Meta Quest. You'll learn basic techniques for overlaying virtual objects on the real world, from passthrough feature setup to background transparency.<br />You can also check the operation in the 01-ShowObject-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=OJ0Fb-v9y5Y"><img src="https://img.youtube.com/vi/OJ0Fb-v9y5Y/0.jpg" alt="SimpleAR" /></a></p>
<p>This article edits the scene created in the following article to make it AR. Please read this first. However, if you already have a VR scene using Meta XR SDK, you don't need to check the article below.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try AR conversion without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open the scene you want to convert to AR<br />*This article uses the VR scene ShowObject created previously</li>
<li>Click <strong>File -&gt; Save As...</strong> to save the current scene with a new name<br /><em>This article uses <em>*ShowObject-AR</em></em></li>
<li>Confirm that the scene name displayed in Hierarchy is ShowObject-AR</li>
</ul>
<h2 id="heading-2-enabling-passthrough-feature">2. Enabling Passthrough Feature</h2>
<p><strong>[Passthrough Settings in OVR Manager]</strong></p>
<ul>
<li>Select <strong>OVRCameraRig</strong> in the Hierarchy</li>
<li>Find <strong>OVR Manager</strong> among the detailed information displayed in the Inspector</li>
<li>Change <strong>Passthrough Support</strong> in the Quest Features section to <strong>Supported</strong> or <strong>Required</strong></li>
<li>Turn <strong>ON</strong> the <strong>Enable Passthrough</strong> checkbox in the Insight Passthrough &amp; Guardian Boundary section</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/3/00.jpg?raw=true" alt="Passthrough Settings Screen" /></p>
<p><strong>[Adding Passthrough Layer]</strong></p>
<p>The operations up to this point enable the passthrough function itself, but passthrough video won't be displayed yet, so add a layer to display the video with the following steps.</p>
<ul>
<li>Click <strong>Add Component</strong> at the bottom of OVRCameraRig's Inspector</li>
<li>Search for <strong>Passthrough</strong> in the search area</li>
<li>Click <strong>OVRPassthroughLayer</strong></li>
<li>Change <strong>Placement</strong> to <strong>Underlay</strong> in the OVRPassthroughLayer added to the Inspector</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/3/00-1.jpg?raw=true" alt="OVRPassthroughLayer Settings Screen" /></p>
<h2 id="heading-3-camera-background-settings">3. Camera Background Settings</h2>
<p>The passthrough display setup is mostly complete with the above steps, but if you build now, only the Skybox will be displayed and AR won't work. Finally, change the camera background rendering settings to enable passthrough video display.</p>
<p><strong>[CenterEyeAnchor Settings]</strong></p>
<ul>
<li>Open the <strong>TrackingSpace</strong> child element of OVRCameraRig in the Hierarchy</li>
<li>Select <strong>CenterEyeAnchor</strong> child element of TrackingSpace</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/3/01.jpg?raw=true" alt="CenterEyeAnchor Selection Screen" /></p>
<p><strong>[Background Transparency]</strong></p>
<ul>
<li>Find Camera in the Inspector and change <strong>Background Type</strong> from <strong>Skybox</strong> to <strong>Solid Color</strong></li>
<li>Change the color in the Background section to <strong>all RGBA values to 0</strong><br /><em>Setting <em>*A (alpha value) to 0</em></em> for transparency is especially important</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting Item</td><td>Setting Value</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Background Type</strong></td><td>Solid Color</td></tr>
<tr>
<td><strong>R</strong></td><td>0</td></tr>
<tr>
<td><strong>G</strong></td><td>0</td></tr>
<tr>
<td><strong>B</strong></td><td>0</td></tr>
<tr>
<td><strong>A</strong></td><td>0</td></tr>
</tbody>
</table>
</div><h2 id="heading-4-testing">4. Testing</h2>
<p><strong>[Installing on Actual Device]</strong></p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Click File -&gt; Build Settings in Unity Editor</li>
<li>Click <strong>Build And Run</strong></li>
<li>Set installer (apk) name in alphanumeric characters and save</li>
<li>After installer generation and installation complete, the app automatically starts in Quest</li>
<li>The cube should be overlaid on the real world. If it appears in a different direction, press and hold the <strong>meta (oculus) button</strong> on the right controller to reset orientation</li>
<li>If installation errors occur, review settings or create only the apk with Build and install the app from <a target="_blank" href="https://sidequestvr.com/setup-howto">SideQuest</a> or <a target="_blank" href="https://developer.oculus.com/documentation/unity/ts-odh/?locale=ja_JP">MetaQuestDeveloperHub</a></li>
</ul>
<p><strong>[Using Meta Quest Link (Windows)]</strong></p>
<p>For details, see the <a target="_blank" href="https://www.meta.com/ja-jp/help/quest/articles/headsets-and-accessories/oculus-link/set-up-link/">official page</a>.</p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Start Quest Link in Quest</li>
<li>Click the Play button in Unity Editor</li>
<li>The cube should be overlaid on the real world. If it appears in a different direction, press and hold the <strong>meta (oculus) button</strong> on the right controller to reset orientation</li>
</ul>
<h2 id="heading-5-next-steps">5. Next Steps</h2>
<p>You've now achieved the basics of AR display. However, controller warp (teleport) and turn (viewpoint rotation) are still enabled. While these features are useful in VR, they may compromise consistency with real space in AR.</p>
<p>To achieve a more natural AR experience, next we'll explain how to disable these locomotion features.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/disabling-locomotion-in-metaquest">Disabling MetaQuest Locomotion</a></p>
<h2 id="heading-6-complete-list-of-meta-xr-sdk-articles">6. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Disabling Locomotion in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
The OVRInteractionComprehensive used in this series includes objects with basic settings for hand and controller interactions already configured. Among these features, locomotion functions for teleportation and viewpoint r...]]></description><link>https://meta-xr-sdk.hashnode.dev/disabling-locomotion-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/disabling-locomotion-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Virtual Reality]]></category><category><![CDATA[Mixed Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:41:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333396900/ce2061be-3686-44aa-9160-da759a078da4.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>The <strong>OVRInteractionComprehensive</strong> used in this series includes objects with basic settings for hand and controller interactions already configured. Among these features, locomotion functions for teleportation and viewpoint rotation using joysticks are also provided and are enabled by default.</p>
<p>However, depending on the content (especially AR content), these features may be unnecessary. This article introduces how to disable unnecessary locomotion features.</p>
<p>This explanation assumes that basic settings for VR and AR implementation are already complete. If you're interested in basic settings for VR or AR development, please also read the following articles.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-disabling-locomotion-features">1. Disabling Locomotion Features</h2>
<p><strong>[Disabling Right Hand Controller Locomotion]</strong></p>
<ul>
<li>Find <strong>OVRCameraRig</strong> in the Hierarchy</li>
<li>Open the <strong>OVRInteractionComprehensive</strong> child element of OVRCameraRig</li>
<li>Further open child elements in this order: <strong>RightInteractions -&gt; Interactors -&gt; Controller -&gt; LocomotionControllerInteractorGroup</strong></li>
<li>Deactivate each of the following child elements of LocomotionControllerInteractorGroup:<ul>
<li><strong>TeleportControllerInteractor</strong> (Teleportation feature)</li>
<li><strong>ControllerTurnerInteractor</strong> (Viewpoint rotation feature)</li>
<li><strong>ControllerSlideInteractor</strong></li>
</ul>
</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/4/00.jpg?raw=true" alt="LocomotionControllerInteractorGroup Deletion Screen" /></p>
<p><strong>[Disabling Left Hand Controller Locomotion]</strong></p>
<ul>
<li>Perform the same settings for <strong>LeftInteractions</strong></li>
<li>Open child elements in this order: <strong>LeftInteractions -&gt; Interactors -&gt; Controller -&gt; LocomotionControllerInteractorGroup</strong></li>
<li>Deactivate each of the following child elements of LocomotionControllerInteractorGroup:<ul>
<li><strong>TeleportControllerInteractor</strong></li>
<li><strong>ControllerTurnerInteractor</strong></li>
<li><strong>ControllerSlideInteractor</strong></li>
</ul>
</li>
</ul>
<p><strong>[Disabling Locomotor Object]</strong></p>
<ul>
<li>Deactivate the <strong>Locomotor</strong> child element of OVRInteractionComprehensive</li>
</ul>
<h2 id="heading-2-features-that-will-be-disabled">2. Features That Will Be Disabled</h2>
<p>With the above settings, the following locomotion features will be disabled:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Feature</td><td>Description</td><td>Target Content</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Teleportation</strong></td><td>Instant movement with joystick</td><td>VR/AR Common</td></tr>
<tr>
<td><strong>Viewpoint Rotation</strong></td><td>Left/right viewpoint rotation with joystick</td><td>Mainly VR</td></tr>
<tr>
<td><strong>Continuous Movement</strong></td><td>Continuous movement with joystick</td><td>Mainly VR</td></tr>
</tbody>
</table>
</div><p>Disabling these features is especially recommended for AR applications to maintain consistency with real space.</p>
<h2 id="heading-3-next-steps">3. Next Steps</h2>
<p>You've now completed disabling locomotion features. Next, we'll explain preparation for object manipulation features.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-objects-in-metaquest-preparation">Grabbing Objects in MetaQuest (Preparation)</a></p>
<h2 id="heading-4-complete-list-of-meta-xr-sdk-articles">4. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Grabbing Objects in MetaQuest (Preparation)]]></title><description><![CDATA[0. Contents of This Article
We begin introducing how to grab and manipulate 3D objects (cubes) with Meta Quest. While "grabbing objects" in VR or AR may sound simple, the required settings differ depending on whether the object is nearby or distant.
...]]></description><link>https://meta-xr-sdk.hashnode.dev/grabbing-objects-in-metaquest-preparation</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/grabbing-objects-in-metaquest-preparation</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:40:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333431971/b37dfcc8-c8b3-410f-bd20-3a9a78f891b2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>We begin introducing how to grab and manipulate 3D objects (cubes) with Meta Quest. While "grabbing objects" in VR or AR may sound simple, the required settings differ depending on whether the object is nearby or distant.</p>
<p>This series will introduce implementation methods for each case, but as a preparatory stage, this article explains settings commonly required for all cases. Completing this article will establish the foundation for object manipulation.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=tkSvItjgyuk"><img src="https://img.youtube.com/vi/tkSvItjgyuk/0.jpg" alt="Interaction" /></a><br /><em>This video is the AR version but supports both AR/VR  
</em>The content of this article is preparatory, so manipulation like in the video cannot be performed with this content alone</p>
<p>This article assumes manipulation of cubes displayed in VR or AR scenes created in the following articles. Starting from cubes without special components added, in a state where they can only be viewed with Quest, you can achieve object manipulation by implementing the content of this article and subsequent articles if you have a similar situation in other projects.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try manipulation without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open the VR or AR scene created in previous articles</li>
<li>Click <strong>File -&gt; Save As...</strong> to save the current scene with a new name<br /><em>This article uses <em>*Manipulation</em></em></li>
<li>Confirm that the scene name displayed in Hierarchy is Manipulation</li>
</ul>
<h2 id="heading-2-enabling-object-contact-detection">2. Enabling Object Contact Detection</h2>
<p>To grab and manipulate objects, you need to detect contact between hands/controllers and objects. The procedure for object contact detection explained here is common to Unity development, not limited to Quest development.</p>
<p><strong>[Checking Collider]</strong></p>
<ul>
<li>Select the target object (<strong>Cube</strong>) in the Hierarchy</li>
<li>Confirm that <strong>BoxCollider</strong> is applied in the Cube details displayed in the Inspector<br /><em>For objects other than Cube, use Colliders appropriate for each object  
</em>For custom models, manually add Colliders</li>
</ul>
<p><strong>[Adding and Configuring Rigidbody]</strong></p>
<ul>
<li>Click the <strong>Add Component</strong> button at the bottom of the Inspector</li>
<li>Enter <strong>Rigidbody</strong> in the search area</li>
<li>Select <strong>Rigidbody</strong> from the displayed candidates</li>
<li>Confirm that Rigidbody has been added to the Inspector and change it as follows:</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Setting Item</td><td>Setting Value</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Use Gravity</strong></td><td>OFF</td><td>Disable gravity effects</td></tr>
<tr>
<td><strong>Is Kinematic</strong></td><td>ON</td><td>Disable physics calculations</td></tr>
</tbody>
</table>
</div><p><strong>Important:</strong> Collider and Rigidbody are necessary for contact detection, so be sure to set them on target objects.</p>
<h2 id="heading-3-adding-grabbable-and-movable-attributes">3. Adding Grabbable and Movable Attributes</h2>
<p>Here we add two types of attributes: making it grabbable and making it movable.</p>
<p><strong>[Adding Grabbable Component]</strong></p>
<ul>
<li>Select Cube in the Hierarchy</li>
<li>Click <strong>Add Component</strong>, then search for <strong>Grabbable</strong></li>
<li>Select <strong>Grabbable</strong> from the candidates</li>
</ul>
<p><strong>[Adding Grab Free Transformer]</strong></p>
<ul>
<li>Click <strong>Add Component</strong> in Cube's Inspector</li>
<li>Search for <strong>Grab Free</strong></li>
<li>Select <strong>Grab Free Transformer</strong> from the candidates<br /><em>Script that enables movement, rotation, and scale changes when grabbed by hands or controllers  
</em>Can set constraints on movement and rotation through detailed configuration<br />*Other options like One Grab Rotate Transformer that restricts only rotation are also available - search with the Transformer keyword if interested</li>
</ul>
<p><strong>[Single-Hand Operation Setup]</strong></p>
<ul>
<li>Open <strong>Options</strong> in Grabbable</li>
<li>Drag and drop <strong>Cube</strong> to the right area of <strong>One Grab Transformer</strong><br />*This operation registers the Grab Transformer added to Cube with the Grabbable script, completing preparation for moving objects with one hand</li>
</ul>
<p><strong>[Two-Hand Operation Setup]</strong></p>
<p><em>Skip this if only single-hand operation is needed</em></p>
<ul>
<li>Open <strong>Options</strong> in Grabbable again</li>
<li>Drag and drop <strong>Cube</strong> to the right area of <strong>Two Grab Transformer</strong><br />*This operation registers the Grab Transformer added to Cube with the Grabbable script, completing preparation for moving objects with both hands</li>
<li>The Grabbable options should look like below if configured correctly</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/5/00.jpg?raw=true" alt="Grabbable Options Settings Screen" /></p>
<p><strong>[Scale Change Settings (Optional)]</strong></p>
<p>If you want to change object scale when operating with both hands, also perform the following settings.</p>
<ul>
<li>Pay attention to <strong>Grab Free Transformer</strong> in Cube's Inspector</li>
<li>Open <strong>Scale Constraints</strong></li>
<li><strong>Uncheck all</strong> X, Y, Z Axis Constraint checkboxes</li>
</ul>
<h2 id="heading-4-next-steps">4. Next Steps</h2>
<p>You've now completed settings for changing the object's (Cube's) position, rotation, and scale when grabbed by controllers or hands.</p>
<p>However, you still can't manipulate the object. As explained at the beginning, this is because the required settings differ depending on the distance between objects and controllers/hands, and we haven't configured these yet. Additionally, we haven't set whether to use controllers, hands, or both for grabbing.</p>
<p>The next articles will introduce configuration methods for both near and far cases.</p>
<p><strong>[Nearby Objects Edition]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-nearby-objects-in-metaquest">Grabbing Nearby Objects in MetaQuest</a></p>
<p><strong>[Distant Objects Edition]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-distant-objects-in-metaquest">Grabbing Distant Objects in MetaQuest</a></p>
<h2 id="heading-5-complete-list-of-meta-xr-sdk-articles">5. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Grabbing Nearby Objects in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This article introduces how to grab and manipulate nearby 3D objects (cubes) with Meta Quest. This video is the AR version but supports both AR/VR.You can also check the operation in the 02-NearManipulation or 02-NearManip...]]></description><link>https://meta-xr-sdk.hashnode.dev/grabbing-nearby-objects-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/grabbing-nearby-objects-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:39:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333469939/7d947920-6e00-40b4-a024-e1671162fe95.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces how to grab and manipulate nearby 3D objects (cubes) with Meta Quest. This video is the AR version but supports both AR/VR.<br />You can also check the operation in the 02-NearManipulation or 02-NearManipulation-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=IrYJ2kuhtq0"><img src="https://img.youtube.com/vi/IrYJ2kuhtq0/0.jpg" alt="NearInteraction" /></a></p>
<p>This article assumes that the preliminary preparations in the following article have been completed. Please note this.</p>
<p><strong>[Preparation Edition]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-objects-in-metaquest-preparation">Grabbing Objects in MetaQuest (Preparation)</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try manipulation without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open the Manipulation VR or AR scene created in previous articles</li>
<li>Click <strong>File -&gt; Save As...</strong> to save the current scene with a new name<br /><em>This article uses <em>*NearManipulation</em></em></li>
<li>Confirm that the scene name displayed in Hierarchy is NearManipulation</li>
</ul>
<h2 id="heading-2-settings-for-grabbing-nearby-objects-with-controllers-or-hands">2. Settings for Grabbing Nearby Objects with Controllers or Hands</h2>
<p>I'll introduce the scripts to add and their configuration methods for cases when using controllers or hands to grab objects. By configuring both, you can use both controllers and hands.</p>
<p><strong>[Grabbing with Controllers]</strong></p>
<ul>
<li>Display Cube's Inspector and click Add Component</li>
<li>Search for Grab Interactable and select <strong>Grab Interactable</strong> from candidates</li>
<li>Drag and drop Cube to <strong>Pointable Element</strong> in the added Grab Interactable<br />*Connects Grab Interactable and Grabbable, reflecting controller grab information to the behavior set in Grabbable (position, rotation, scale changes)</li>
<li>Further drag and drop Cube to <strong>Rigidbody</strong> in Grab Interactable<br />*By assigning the Rigidbody added to Cube in the previous article, contact detection between controller and Cube is utilized</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/6/00.jpg?raw=true" alt="Grab Interactable Settings Screen" /></p>
<p><strong>[Grabbing with Hands]</strong></p>
<ul>
<li>Display Cube's Inspector and click Add Component</li>
<li>Search for Grab Interactable and select <strong>Hand Grab Interactable</strong> from candidates</li>
<li>Drag and drop Cube to <strong>Pointable Element</strong> in the added Hand Grab Interactable<br />*Connects Hand Grab Interactable and Grabbable, reflecting hand grab information to the behavior set in Grabbable (position, rotation, scale changes)</li>
<li>Further drag and drop Cube to <strong>Rigidbody</strong> in Hand Grab Interactable<br />*By assigning the Rigidbody added to Cube in the previous article, contact detection between hand and Cube is utilized</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/6/01.jpg?raw=true" alt="Hand Grab Interactable Settings Screen" /></p>
<p><strong>[Note!]</strong><br />If ControllerOnly is selected in Hand Tracking Support of OVR Manager attached to the OVRCameraRig object, hand tracking won't work and you won't be able to grab objects with hands. Please check the settings.</p>
<h2 id="heading-3-fine-tuning-controller-settings-optional">3. Fine-tuning Controller Settings (Optional)</h2>
<p>The above operations enable grabbing and moving objects with controllers. By default, the grip button (middle finger) is used for grabbing. Here's how to enable grabbing with the trigger button as well.</p>
<ul>
<li>Open the OVRInteractionComprehensive child element of OVRCameraRig in the Hierarchy</li>
<li>Further open child elements in this order: <strong>RightInteractions -&gt; Interactors -&gt; Controller and No Hand -&gt; ControllerGrabInteractor</strong></li>
<li>Open the <strong>GripButtonSelector</strong> child element of ControllerGrabInteractor</li>
<li>Pay attention to <strong>ControllerSelector</strong> in GripButtonSelector's Inspector</li>
<li>Turn <strong>ON</strong> the TriggerButton checkbox in <strong>Controller Button Usage</strong><br />*Turn off the GripButton checkbox if GripButton is not needed</li>
<li>Perform the same operation for the left hand controller (LeftInteractions) to set the button used for grabbing</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/6/02.jpg?raw=true" alt="Trigger Manipulation" /></p>
<h2 id="heading-4-fine-tuning-hand-behavior-optional">4. Fine-tuning Hand Behavior (Optional)</h2>
<p>This is a detailed point, but by default when scaling objects with both hands, the hand objects don't follow the actual hands. If you want the hand objects to follow, try the following.</p>
<ul>
<li>Select Cube in the Hierarchy</li>
<li>Pay attention to Hand Grab Interactable registered to Cube in the Inspector</li>
<li>Change <strong>Hand Alignment</strong> setting to <strong>None</strong></li>
</ul>
<h2 id="heading-6-next-steps">6. Next Steps</h2>
<p>You've now achieved grabbing and manipulating nearby objects. You can also combine near and far object manipulation for the same object.</p>
<p>If you want to add distant object manipulation, follow the procedures from chapter 2 of the next article.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-distant-objects-in-metaquest">Grabbing Distant Objects in MetaQuest</a></p>
<h2 id="heading-7-complete-list-of-meta-xr-sdk-articles">7. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Grabbing Distant Objects in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This article introduces how to grab and manipulate distant 3D objects (cubes) with Meta Quest. This video is the AR version but supports both AR/VR.You can also check the operation in the 03-FarManipulation or 03-FarManipu...]]></description><link>https://meta-xr-sdk.hashnode.dev/grabbing-distant-objects-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/grabbing-distant-objects-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Virtual Reality]]></category><category><![CDATA[Mixed Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:38:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333505206/8001dbcb-4844-4cde-b512-8de49482b34c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces how to grab and manipulate distant 3D objects (cubes) with Meta Quest. This video is the AR version but supports both AR/VR.<br />You can also check the operation in the 03-FarManipulation or 03-FarManipulation-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=2xgMdiKcJLo"><img src="https://img.youtube.com/vi/2xgMdiKcJLo/0.jpg" alt="FarInteraction" /></a></p>
<p>This article assumes that the preliminary preparations in the following article have been completed. Please note this.</p>
<p><strong>[Preparation Edition]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-objects-in-metaquest-preparation">Grabbing Objects in MetaQuest (Preparation)</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try manipulation without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open the Manipulation or NearManipulation VR or AR scene created in previous articles</li>
<li>Click <strong>File -&gt; Save As...</strong> to save the current scene with a new name<br /><em>This article uses <em>*FarManipulation</em></em></li>
<li>Confirm that the scene name displayed in Hierarchy is FarManipulation</li>
</ul>
<h2 id="heading-2-settings-for-grabbing-distant-objects-with-controllers-or-hands">2. Settings for Grabbing Distant Objects with Controllers or Hands</h2>
<p>I'll introduce the scripts to add and their configuration methods for cases when using controllers or hands to grab objects. By configuring both, you can use both controllers and hands.</p>
<p><strong>[Grabbing with Controllers]</strong></p>
<ul>
<li>Display Cube's Inspector and click Add Component</li>
<li>Search for Grab Interactable and select <strong>Distance Grab Interactable</strong> from candidates</li>
<li>Drag and drop Cube to <strong>Pointable Element</strong> in the added Distance Grab Interactable<br />*Connects Distance Grab Interactable and Grabbable, reflecting controller grab information to the behavior set in Grabbable (position, rotation, scale changes)</li>
<li>Further drag and drop Cube to <strong>Rigidbody</strong> in Distance Grab Interactable<br />*By assigning the Rigidbody added to Cube in the previous article, contact detection between controller pointer and Cube is utilized</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/7/00.jpg?raw=true" alt="Distance Grab Interactable Settings Screen" /></p>
<p><strong>[Grabbing with Hands]</strong></p>
<ul>
<li>Display Cube's Inspector and click Add Component</li>
<li>Search for Grab Interactable and select <strong>Distance Hand Grab Interactable</strong> from candidates</li>
<li>Drag and drop Cube to <strong>Pointable Element</strong> in the added Distance Hand Grab Interactable<br />*Connects Distance Hand Grab Interactable and Grabbable, reflecting hand grab information to the behavior set in Grabbable (position, rotation, scale changes)</li>
<li>Further drag and drop Cube to <strong>Rigidbody</strong> in Distance Hand Grab Interactable<br />*By assigning the Rigidbody added to Cube in the previous article, contact detection between hand pointer and Cube is utilized</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/7/01.jpg?raw=true" alt="Distance Hand Grab Interactable Settings Screen" /></p>
<p><strong>[Note!]</strong></p>
<p>If <strong>ControllerOnly</strong> is selected in Hand Tracking Support of OVR Manager attached to the OVRCameraRig object, hand tracking won't work and you won't be able to grab objects with hands. Please check the settings.</p>
<h2 id="heading-3-current-status-check-and-behavior-modification">3. Current Status Check and Behavior Modification</h2>
<p>The following video shows the behavior of content created with the operations so far. (For controller grabbing, use the middle finger grip button.)</p>
<p>As you can see, the default Meta XR SDK setting is to pull distant objects towards you, which differs from the behavior shown in the opening video.<br />While this may be fine for some content, there are cases where you want to change only the position without pulling objects towards you, so I'll introduce how to achieve this.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=lPVLoC8OoqA"><img src="https://img.youtube.com/vi/lPVLoC8OoqA/0.jpg" alt="FarInteraction1" /></a></p>
<p><strong>[Object Behavior When Grabbed]</strong></p>
<ul>
<li>Select Cube and click Add Component at the bottom of the Inspector</li>
<li>Search for Move From and select <strong>Move From Target Provider</strong> to add</li>
</ul>
<p><strong>About Behavior Differences:</strong></p>
<ul>
<li><strong>Default</strong>: Objects move to controller or hand position before manipulation begins</li>
<li><strong>After Change</strong>: Objects can be manipulated while maintaining their original position</li>
</ul>
<p>Use Move From Target Provider with the following steps to set objects to maintain their original position.</p>
<p><strong>[Behavior Adjustment for Controller Use]</strong></p>
<ul>
<li>Pay attention to <strong>Distance Grab Interactable</strong> in the Inspector</li>
<li>Open <strong>Optionals</strong></li>
<li>Drag and drop Cube to <strong>Movement Provider</strong> to associate the Move From Target Provider registered to this Cube</li>
</ul>
<p><strong>[Behavior Adjustment for Hand Use]</strong></p>
<ul>
<li>Pay attention to <strong>Distance Hand Grab Interactable</strong> in the Inspector</li>
<li>Turn <strong>Reset Grab On Grabs Updated</strong> to <strong>OFF</strong></li>
<li>Open <strong>Optionals</strong></li>
<li>Drag and drop Cube to <strong>Movement Provider</strong> to associate the Move From Target Provider registered to this Cube</li>
</ul>
<h2 id="heading-4-fine-tuning-controller-settings-optional">4. Fine-tuning Controller Settings (Optional)</h2>
<p>The above operations enable grabbing and moving objects with controllers. By default, the grip button (middle finger) is used for grabbing. Here's how to enable grabbing with the trigger button as well.</p>
<ul>
<li>Open the OVRInteractionComprehensive child element of OVRCameraRig in the Hierarchy</li>
<li>Further open child elements in this order: <strong>RightInteractions -&gt; Interactors -&gt; Controller and No Hand -&gt; ControllerDistanceGrabInteractor</strong></li>
<li>Open the <strong>GripButtonSelector</strong> child element of ControllerDistanceGrabInteractor</li>
<li>Pay attention to <strong>ControllerSelector</strong> in GripButtonSelector's Inspector</li>
<li>Turn <strong>ON</strong> the TriggerButton checkbox in <strong>Controller Button Usage</strong><br />*Turn off the GripButton checkbox if GripButton is not needed</li>
<li>Perform the same operation for the left hand controller (LeftInteractions) to set the button used for grabbing</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/7/02.jpg?raw=true" alt="Trigger Manipulation" /></p>
<h2 id="heading-5-fine-tuning-hand-behavior-optional">5. Fine-tuning Hand Behavior (Optional)</h2>
<p>This is a detailed point, but by default when scaling Cube with both hands, the hand objects fly towards the Cube. If you want the hand objects to follow the actual hands, try the following.</p>
<ul>
<li>Select Cube in the Hierarchy</li>
<li>Pay attention to Distance Hand Grab Interactable registered to Cube in the Inspector</li>
<li>Change <strong>Hand Alignment</strong> setting to <strong>None</strong></li>
</ul>
<h2 id="heading-6-next-steps">6. Next Steps</h2>
<p>You've now achieved grabbing and manipulating distant objects. You can also combine distant and nearby object manipulation for the same object.</p>
<p>If you want to add nearby object manipulation, follow the procedures from chapter 2 of the next article.</p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/grabbing-nearby-objects-in-metaquest">Grabbing Nearby Objects in MetaQuest</a></p>
<h2 id="heading-7-complete-list-of-meta-xr-sdk-articles">7. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Ray Interaction in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This time we'll cover interaction with pointers (Rays) emitted from controllers or hands in Meta Quest. Specifically, we'll introduce procedures to implement Hover (pointing) and selection (click) detection using Rays.You ...]]></description><link>https://meta-xr-sdk.hashnode.dev/ray-interaction-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/ray-interaction-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:38:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333537663/969646e6-166b-401e-bba8-0698fc972f9c.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This time we'll cover interaction with pointers (Rays) emitted from controllers or hands in Meta Quest. Specifically, we'll introduce procedures to implement Hover (pointing) and selection (click) detection using Rays.<br />You can also check the operation in the 04-RayInteraction or 04-RayInteraction-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=T1ENjhBP9-w"><img src="https://img.youtube.com/vi/T1ENjhBP9-w/0.jpg" alt="ray interaction" /></a><br />*This video is the AR version but supports both AR/VR.</p>
<p>This article assumes manipulation of cubes displayed in VR or AR scenes created in the following articles. Starting from cubes without special components added, in a state where they can only be viewed with Quest, you can achieve object manipulation by implementing the content of this article and subsequent articles if you have a similar situation in other projects.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the above articles, this chapter introduces how to duplicate the scene to try Ray interaction without destroying the existing scene. Skip this if unnecessary.</p>
<ul>
<li>Open the VR or AR scene created in the above articles</li>
<li>Click File -&gt; Save As... to save the current scene with a new name<br />*This article uses RayInteraction</li>
<li>Confirm that the scene name displayed in Hierarchy is RayInteraction</li>
</ul>
<h2 id="heading-2-enabling-ray-object-intersection-detection">2. Enabling Ray-Object Intersection Detection</h2>
<p>To implement interaction with Rays, add a script to the object that detects interaction with Rays.</p>
<ul>
<li>Select the target object (Cube) in the Hierarchy</li>
<li>Confirm that <strong>BoxCollider</strong> is applied in the Cube details displayed in the Inspector<br /><em>For objects other than Cube, set Colliders appropriate for each object  
</em>For custom models, manually add Colliders</li>
<li>Click the Add Component button at the bottom of the Inspector</li>
<li>Enter <strong>Interactable</strong> in the search area</li>
<li>Select <strong>Ray Interactable</strong> from the displayed candidates</li>
</ul>
<p>When you check the added Ray Interactable, the Surface item shows None. This item is required as it registers the shape for determining Ray intersection with Ray Interactable.</p>
<ul>
<li>Click Add Component at the bottom of Cube's Inspector</li>
<li>Search for Collider and select <strong>Collider Surface</strong></li>
<li>Drag and drop Cube to Collider Surface<br />*Uses Cube's collider shape as the shape for intersection detection</li>
<li>Drag and drop Cube to <strong>Surface</strong> in <strong>RayInteractable</strong><br />*Registers the shape information (Surface) created above to RayInteractable</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/8/00.jpg?raw=true" alt="Ray Interactable Settings Screen" /></p>
<h2 id="heading-3-getting-ray-interaction-events">3. Getting Ray Interaction Events</h2>
<p>With the above operations, you're ready for Ray interaction, so add functionality to receive Hover (pointing) and selection (click) as events.</p>
<ul>
<li>Select Cube in the Hierarchy</li>
<li>Search for <strong>Interactable</strong> in Add Component at the bottom of Cube's Inspector</li>
<li>Select <strong>Interactable Unity Event Wrapper</strong></li>
<li>Drag and drop Cube to <strong>Interactable View</strong> in Interactable Unity Event Wrapper<br />*Registers Ray Interactable to connect to Hover and Select event firing</li>
</ul>
<h2 id="heading-4-testing-ray-interaction-operation">4. Testing Ray Interaction Operation</h2>
<p>Actually receive events and test operation. This article displays Hover and Select states as text.</p>
<ul>
<li>Right-click in the empty space of the Hierarchy</li>
<li>Click 3D Object -&gt; Text - TextMeshPro<br />*If TextMeshPro is not installed, install TextMeshPro following the dialog instructions. (Sample installation is unnecessary)</li>
<li>Change Text(TMP) settings in the Inspector as follows to display text above the Cube</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/8/01.jpg?raw=true" alt="Text(TMP) Settings Screen" /></p>
<ul>
<li>Pay attention to TextMeshPro-Text in the Inspector</li>
<li>Change text alignment to center in Alignment</li>
<li>Click Cube and pay attention to <strong>Interactable Unity Event Wrapper</strong> in the Inspector</li>
<li>Click <strong>+</strong> at the bottom right of <strong>WhenHover</strong></li>
<li>Drag and drop Text(TMP) to the area marked <strong>None</strong></li>
<li>Open the dropdown menu marked NoFunction</li>
<li>Click <strong>TextMeshPro -&gt; string text</strong></li>
<li>Enter the text you want to display when Hover starts in the text area below the dropdown menu (example: Hover)</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/8/02.jpg?raw=true" alt="Event Settings Screen" /></p>
<ul>
<li>The above operation will display Hover when Hover (pointing) starts. Set text to display for the following events in the same way<br /><strong>When Unhover() :</strong> Un-Hover<br /><strong>When  Select() :</strong> Select<br /><strong>When Unselect() :</strong> Un-Select</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/8/03.jpg?raw=true" alt="All Event Settings Screen" /></p>
<p>When testing operation, Hover or Un-Hover is displayed when Ray intersection starts and ends as in the opening video, and Select, Un-Select is displayed when finger pinch or controller trigger press starts and ends.</p>
<h2 id="heading-5-complete-list-of-meta-xr-sdk-articles">5. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Unity UI Interaction in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This article introduces button interaction as an example of operating Unity UI with Meta Quest. First, we'll confirm that hands and controllers can interact with buttons, then explain how to make a Cube disappear when a bu...]]></description><link>https://meta-xr-sdk.hashnode.dev/unity-ui-interaction-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/unity-ui-interaction-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:36:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333614537/3b69fdef-f363-440e-b44e-e7576f28710e.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces button interaction as an example of operating Unity UI with Meta Quest. First, we'll confirm that hands and controllers can interact with buttons, then explain how to make a Cube disappear when a button is pressed as an example of interaction.<br />You can also check the operation in the 05-UiInteraction or 05-UiInteraction-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=_gd3JA_L0HA"><img src="https://img.youtube.com/vi/_gd3JA_L0HA/0.jpg" alt="Button Interaction3" /></a></p>
<p>*This video is the AR version but supports both AR/VR.</p>
<p>This article assumes manipulation of cubes displayed in VR or AR scenes created in the following articles. Starting from cubes without special components added, in a state where they can only be viewed with Quest, you can achieve object manipulation by implementing the content of this article and subsequent articles if you have a similar situation in other projects.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the above articles, to try UI operation without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open the VR or AR scene created above</li>
<li>Click File -&gt; Save As... to save the current scene with a new name<br /><em>This article uses <em>*UiInteraction</em></em></li>
<li>Confirm that the scene name displayed in Hierarchy is UiInteraction</li>
</ul>
<h2 id="heading-2-creating-ui">2. Creating UI</h2>
<p>Create a button and place it in 3D space.</p>
<p><strong>[Creating a Button]</strong></p>
<ul>
<li>Right-click in the empty space of the Hierarchy</li>
<li>Click <strong>UI -&gt; Button - TextMeshPro</strong></li>
<li>If TMP Importer (Text Mesh Pro installer) appears, click <strong>Import TMP Essentials</strong></li>
<li>Close TMP Importer</li>
<li>Confirm that Canvas and EventSystem have been added</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/9/00.jpg?raw=true" alt="Hierarchy After UI Creation" /></p>
<p><strong>[3D Space Placement Settings]</strong></p>
<ul>
<li>Select Canvas and find the Canvas component in the Inspector</li>
<li>Change Canvas Render Mode from <strong>World Space</strong><br />*By default, UI is placed on screen, but this change places it in 3D space</li>
<li>Change Button child element <strong>PosX</strong> and <strong>PosY</strong> to <strong>0</strong></li>
<li>Operate Canvas Inspector parameters to adjust UI size as follows<br /><strong>Position</strong>   X: <strong>0</strong>   Y: <strong>1.2</strong>   Z: <strong>0.8</strong><br /><strong>Size</strong>       Width: <strong>200</strong>   Height: <strong>90</strong><br /><strong>Scale</strong>      X: <strong>0.003</strong>   Y: <strong>0.003</strong>   Z: <strong>0.003</strong><br />*The white frame in the figure represents the Canvas area</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/9/01.jpg?raw=true" alt="Canvas Settings Screen" /></p>
<h2 id="heading-3-making-canvas-quest-compatible">3. Making Canvas Quest-Compatible</h2>
<p>At this stage, we've only created UI and can't interact with controllers or hands used in Meta Quest, so we'll configure basic interaction settings.</p>
<p><strong>[Pointable Canvas Settings]</strong></p>
<ul>
<li>Click Canvas and click <strong>Add Component</strong> at the bottom of the Inspector</li>
<li>Search for <strong>Pointable</strong> and click <strong>Pointable Canvas</strong> from the displayed candidates to add</li>
<li>Drag and drop the <strong>Canvas</strong> object in Hierarchy to the right area of Canvas in the added Pointable Canvas</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/9/02.jpg?raw=true" alt="Pointable Canvas Settings Screen" /></p>
<p><strong>[EventSystem Settings]</strong></p>
<ul>
<li>Select EventSystem in Hierarchy</li>
<li>Click Add Component and search for <strong>Pointable Canvas</strong></li>
<li>Click <strong>Pointable Canvas Module</strong> to add<br />*Uses Pointable Canvas input provided by Meta instead of normal input</li>
<li>Turn <strong>ON</strong> the Exclusive Mode checkbox in Pointable Canvas Module</li>
</ul>
<h2 id="heading-4-ui-detection-area-settings-in-3d-space">4. UI Detection Area Settings in 3D Space</h2>
<p>With Meta XR SDK, you need to separately set detection areas in 3D space for interaction between UI (Canvas) and hands or controllers.</p>
<p><strong>[Creating Contact Detection Object]</strong></p>
<ul>
<li>Right-click in the empty space of Hierarchy and click <strong>Create Empty</strong></li>
<li>Name the generated GameObject <strong>Surface</strong><br />*Any name is fine</li>
<li>Click Surface and pay attention to Transform</li>
<li>Set Surface object position and size same as Canvas<br /><strong>Position</strong>   X: <strong>0</strong>   Y: <strong>1.2</strong>   Z: <strong>0.8</strong><br /><strong>Scale</strong>      X: <strong>0.6</strong>   Y: <strong>0.27</strong>   Z: <strong>1</strong><br /><em>Scale is calculated as Canvas Width × Scale(x), Height × Scale(Y). Z can be anything  
</em>It's okay to make it slightly larger or smaller than Canvas</li>
</ul>
<p><strong>[Adding Surface-Related Components]</strong></p>
<ul>
<li>Click <strong>Add Component</strong> in Surface's Inspector</li>
<li><p>Search for <strong>Plane Surface</strong> and click <strong>Plane Surface</strong> to add<br />*This prepares the plane at Surface position (= Canvas position) for pointer contact</p>
</li>
<li><p>Click <strong>Add Component</strong> in Surface's Inspector</p>
</li>
<li><p>Click <strong>Clipped Plane Surface</strong> from candidates to add<br />*Pointer contact detection will only occur in the clipping area</p>
</li>
<li><p>Click <strong>Add Component</strong> in Surface's Inspector</p>
</li>
<li>Search for <strong>Bounds</strong> and click <strong>Bounds Clipper</strong> to add<br />*Script to set clipping area is added</li>
</ul>
<p><strong>[Associating Components]</strong></p>
<ul>
<li>Pay attention to Plane Surface in Clipped Plane Surface</li>
<li>Drag and drop Surface object<br />*Applies clipping to Surface object's plane</li>
<li>Open Clippers in Clipped Plane Surface and click + button</li>
<li>Drag and drop Surface object to Element 0<br />*Clips with the area set by Bounds Clipper</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/9/03.jpg?raw=true" alt="Surface Settings Screen" /></p>
<p><strong>[Optional]</strong></p>
<ul>
<li>Finally, drag and drop Surface object to Canvas to make it a child element</li>
<li>Confirm that the child Surface Position is 0 0 0 just to be safe</li>
</ul>
<h2 id="heading-5-selecting-interaction-method">5. Selecting Interaction Method</h2>
<p>Set whether UI responds to Rays from controllers or hands, or Poke operations touching UI directly nearby. You can set either one or both.</p>
<p><strong>[Remote Operation Using Ray]</strong></p>
<ul>
<li>Click Canvas and click <strong>Add Component</strong> at the bottom of the Inspector</li>
<li>Search for <strong>Ray Interactable</strong> and add <strong>Ray Interactable</strong> from displayed candidates</li>
<li>Drag and drop <strong>Canvas</strong> object to <strong>Pointable Element</strong> in the added Ray Interactable<br />*Links Ray operation and Pointable Canvas to enable UI operation within Canvas</li>
<li>Drag and drop <strong>Surface</strong> object to Surface in Ray Interactable</li>
<li>If a dialog appears, select <strong>ClippedPlaneSurface</strong><br />*Enables interaction only in the area set by Clipped Plane Surface</li>
</ul>
<p><strong>[Proximity Operation Using Poke]</strong></p>
<ul>
<li>Click Canvas and click <strong>Add Component</strong> at the bottom of the Inspector</li>
<li>Search for <strong>Poke Interactable</strong> and add <strong>Poke Interactable</strong> from displayed candidates</li>
<li>Drag and drop <strong>Canvas</strong> object to <strong>Pointable Element</strong> in the added Poke Interactable<br />*Links Poke operation and Pointable Canvas to enable UI operation within Canvas</li>
<li>Drag and drop <strong>Surface</strong> object to Surface Patch in Poke Interactable</li>
<li>If a dialog appears, select <strong>ClippedPlaneSurface</strong><br />*Enables interaction only in the area set by Clipped Plane Surface</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/9/04.jpg?raw=true" alt="Interaction Selection Screen" /></p>
<p><strong>[Basic Interaction Confirmation]</strong></p>
<p>With the above operations, interaction with buttons becomes possible. When testing operation, you can confirm that the button color changes slightly when clicking the button as in the following video.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=qk501EiFNV4"><img src="https://img.youtube.com/vi/qk501EiFNV4/0.jpg" alt="Button Interaction1" /></a></p>
<h2 id="heading-6-button-event-settings">6. Button Event Settings</h2>
<p>The settings here are not specific to Meta XR SDK but relate to general Unity UI behavior. As an example, let's make the Cube disappear when a button is pressed.</p>
<ul>
<li>Click Button and find On Click in the Inspector</li>
<li>Click the + button at the bottom right</li>
<li>Drag and drop <strong>Cube</strong> to the area marked None in the newly added area</li>
<li>Open the dropdown menu marked No Function</li>
<li>Click <strong>GameObject -&gt; SetActive</strong></li>
<li>Confirm that the checkbox is <strong>OFF</strong>  </li>
<li>This will make Cube inactive when the button is pressed</li>
</ul>
<h2 id="heading-7-testing-operation">7. Testing Operation</h2>
<p><strong>[Installing on Actual Device]</strong></p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Click File -&gt; Build Settings in Unity Editor</li>
<li>Click Build And Run</li>
<li>Set installer (apk) name in alphanumeric characters and save</li>
</ul>
<p><strong>[Using Meta Quest Link (Windows)]</strong></p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Start Quest Link in Quest</li>
<li>Click the Play button in Unity Editor</li>
</ul>
<p>You can confirm that the Cube disappears when clicking the button with either Ray or Poke.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=-3o3W5_4ae8"><img src="https://img.youtube.com/vi/-3o3W5_4ae8/0.jpg" alt="Button Interaction2" /></a></p>
<h2 id="heading-8-summary-of-quest-ui-interaction-setup-key-points">8. Summary of Quest UI Interaction Setup Key Points</h2>
<p>Since the operation procedures were numerous, here's a summary of key points required for Quest UI interaction.</p>
<p><strong>[Making Canvas Quest-Compatible]</strong></p>
<ul>
<li>Attach <strong>Pointable Canvas</strong> to Canvas</li>
</ul>
<p><strong>[Making EventSystem Quest-Compatible]</strong></p>
<ul>
<li>Attach <strong>Pointable Canvas Module</strong> to EventSystem</li>
</ul>
<p><strong>[Define UI Position and Range for Quest Interaction]</strong></p>
<ul>
<li>Define plane with <strong>Plane Surface</strong> (infinite plane)</li>
<li>Limit range with <strong>Clipped Plane Surface</strong> and <strong>Bounds Clipper</strong></li>
</ul>
<p><strong>[Specify Interaction Method]</strong></p>
<ul>
<li><strong>Ray Operation</strong>: Add <strong>Ray Interactable</strong> to Canvas</li>
<li><strong>Poke Operation</strong>: Add <strong>Poke Interactable</strong> to Canvas</li>
</ul>
<p>With the above settings, Unity UI interaction with Meta Quest becomes possible.</p>
<h2 id="heading-9-complete-list-of-meta-xr-sdk-articles">9. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Natural Manipulation Using Custom Hand Poses in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
While previous articles introduced basic hand manipulation implementation methods, actual applications require more natural and intuitive operation feeling. This article explains manipulation techniques that use Hand Pose ...]]></description><link>https://meta-xr-sdk.hashnode.dev/natural-manipulation-using-custom-hand-poses-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/natural-manipulation-using-custom-hand-poses-in-metaquest</guid><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:35:29 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333766773/3e3aebf5-b410-49a2-8cd7-6c861f462097.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>While previous articles introduced basic hand manipulation implementation methods, actual applications require more natural and intuitive operation feeling. This article explains manipulation techniques that use Hand Pose to record the relative positional relationship between objects and hands, faithfully reproducing how things are held in the real world. This feature makes it possible to operate objects like tools or instruments where specific holding methods are important with a more realistic feeling.<br />You can also check the operation in the 06-HandPoseManipulation or 06-HandPoseManipulation-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p>This article assumes Windows environment development to use QuestLink.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=ts9KvhjWxNo"><img src="https://img.youtube.com/vi/ts9KvhjWxNo/0.jpg" alt="HandPoseManipulation" /></a><br />*This video is the AR version but supports both AR/VR.</p>
<p>This article proceeds based on VR or AR scenes created in the following articles.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try Hand Pose manipulation without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open a VR or AR compatible scene</li>
<li>Click File -&gt; Save As... to save the current scene with a new name<br />*This article uses HandPoseManipulation</li>
<li>Confirm that the scene name displayed in Hierarchy is HandPoseManipulation</li>
</ul>
<h2 id="heading-2-object-preparation">2. Object Preparation</h2>
<p>We'll use a Cylinder object for Hand Pose manipulation demonstration.</p>
<ul>
<li>Delete Cube from Hierarchy</li>
<li>Right-click in the empty space of Hierarchy with nothing selected</li>
<li>Click 3D Object -&gt; Cylinder</li>
</ul>
<h2 id="heading-3-creating-object-structure-for-hand-pose-manipulation">3. Creating Object Structure for Hand Pose Manipulation</h2>
<p>To perform manipulation following hands, we use Grabbable and Hand Grab Pose RecorderGameObject introduced in previous articles, but the manipulation target object requires a slightly different structure setup. Specifically, create a parent GrabRoot object and place Cylinder as its child element.</p>
<ul>
<li>Right-click in the empty space of Hierarchy</li>
<li>Click Create Empty</li>
<li>Change the created GameObject name to <strong>GrabRoot</strong></li>
</ul>
<p><strong>[GrabRoot Object Settings]</strong></p>
<ul>
<li>Change GrabRoot object position and size as follows<br />Position: <strong>0 1.3 0.4</strong><br />Rotation: <strong>0 0 0</strong><br />Scale: <strong>1 1 1</strong><br />*Root Scale must be 1</li>
</ul>
<p><strong>[Cylinder Placement]</strong></p>
<ul>
<li>Drag Cylinder to move it as a child element of GrabRoot</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/10/00.jpg?raw=true" alt="Object Structure" /></p>
<ul>
<li>Change Cylinder object position and size as follows<br />Position: <strong>0 0 0</strong><br />Rotation: <strong>0 0 0</strong><br />Scale: <strong>0.03 0.1 0.03</strong></li>
</ul>
<h2 id="heading-4-basic-manipulation-feature-settings">4. Basic Manipulation Feature Settings</h2>
<p><strong>[Physics Behavior Settings]</strong></p>
<ul>
<li>Click GrabRoot</li>
<li>Click Add Component in the Inspector</li>
<li>Search for <strong>Rigidbody</strong> and add<br />*Used for contact detection as mentioned earlier</li>
<li>Set RigidBody Use Gravity and Is Kinematic as follows<br /><strong>Use Gravity: OFF</strong><br /><strong>Is Kinematic: ON</strong></li>
</ul>
<p><strong>[Adding Manipulation Features]</strong></p>
<ul>
<li>Search for <strong>Grabbable</strong> in GrabRoot's Inspector Add Component and add<br />*Used to enable manipulation as mentioned earlier</li>
</ul>
<h2 id="heading-5-creating-hand-shape-data">5. Creating Hand Shape Data</h2>
<p>Here we create information about hand shapes you want objects to follow and add manipulation features. We use tools provided by the SDK to create hand shape data.</p>
<p><strong>[Starting Hand Grab Pose Recorder]</strong></p>
<ul>
<li>Click <strong>Meta</strong> in the menu bar</li>
<li>Click <strong>Interaction -&gt; Hand Grab Pose Recorder</strong> in order</li>
<li>Pay attention to <strong>1</strong> in the Hand Grab Pose Recorder dialog</li>
<li>Select the hand you want to record shapes for (example: RightInteractions) in <strong>Hand used for recording poses</strong></li>
<li>Select <strong>GrabRoot</strong> in <strong>GameObject to record the hand grab poses for</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/10/01.jpg?raw=true" alt="Hand Grab Pose Recorder Settings Screen" /></p>
<h2 id="heading-6-recording-hand-shapes">6. Recording Hand Shapes</h2>
<p><strong>[Recording Preparation]</strong></p>
<ul>
<li>Connect Quest and PC with Link cable</li>
<li>Start Quest Link in Quest</li>
<li>Click the Play button in Unity Editor</li>
</ul>
<p><strong>[Recording Hand Shapes]</strong></p>
<ul>
<li>Press the <strong>Space key</strong> on keyboard while pretending to grab the Cylinder</li>
<li>Hand shape is recorded</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/10/02.jpg?raw=true" alt="Hand Shape Recording Screen" /></p>
<p><strong>[Saving Recording Data]</strong></p>
<ul>
<li>Return to Hand Grab Pose Recorder while in Play mode and click <strong>Save To Collection</strong></li>
<li>File with recorded hand shape is saved</li>
<li>Stop Play mode</li>
<li>Finally click <strong>Load From Collection</strong></li>
<li><strong>HandGrabInteractable</strong> is automatically added to GrabRoot child elements</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/10/03.jpg?raw=true" alt="After HandGrabInteractable Addition" /></p>
<h2 id="heading-7-manipulation-feature-adjustments">7. Manipulation Feature Adjustments</h2>
<p>Hand manipulation is now possible with the above operations, but currently you can grab not only by grasping with hands but also by pinching with fingers. Also, manipulation only supports the right hand. So we'll add procedures to resolve these issues.</p>
<p><strong>[Restricting Grab Methods]</strong></p>
<ul>
<li>Click HandGrabInteractable child element of GrabRoot</li>
<li>Find <strong>Supported Grab Types</strong> in the Inspector</li>
<li>Change this content from <strong>All</strong> to <strong>Palm</strong><br />*This disables pinch manipulation and restricts to palm grasping only</li>
</ul>
<p><strong>[Adding Left Hand Support]</strong></p>
<ul>
<li>Click <strong>Create Mirrored HandGrabInteractable</strong> at the bottom of the Inspector to also create left hand Interactable<br />*This enables similar manipulation with the left hand</li>
</ul>
<h2 id="heading-8-testing-operation">8. Testing Operation</h2>
<p><strong>[Using Meta Quest Link (Windows)]</strong></p>
<p>For details, see the <a target="_blank" href="https://www.meta.com/ja-jp/help/quest/articles/headsets-and-accessories/oculus-link/set-up-link/">official page</a>.</p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Start Quest Link in Quest</li>
<li>Click the Play button in Unity Editor</li>
<li>Try grabbing the Cylinder with the recorded hand shape. You should be able to confirm that the object can be grabbed naturally according to the hand shape</li>
</ul>
<p><strong>[Installing on Actual Device]</strong></p>
<ul>
<li>Connect Quest and PC with USB cable</li>
<li>Click File -&gt; Build Settings in Unity Editor</li>
<li>Click Build And Run</li>
<li>Set installer (apk) name in alphanumeric characters and save</li>
<li>After installer generation and installation complete, the app automatically starts in Quest</li>
</ul>
<h2 id="heading-9-further-customization">9. Further Customization</h2>
<p>Using Hand Grab Pose Recorder, you can record more complex hand shapes or multiple holding methods. For example:</p>
<ul>
<li>Recording multiple holding methods for the same object</li>
<li>Recording shapes for different hand sizes</li>
<li>Fine adjustments matching more natural hand movements</li>
</ul>
<p>For these details, check the various setting options in Hand Grab Pose Recorder.</p>
<h2 id="heading-10-complete-list-of-meta-xr-sdk-articles">10. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item><item><title><![CDATA[Palm UI Using PalmMenu in MetaQuest]]></title><description><![CDATA[0. Contents of This Article
This article introduces how to implement PalmMenu that displays UI on the palm and operates it with fingers of the other hand in Meta Quest. PalmMenu can achieve more natural interaction that appeals to the sense of touch ...]]></description><link>https://meta-xr-sdk.hashnode.dev/palm-ui-using-palmmenu-in-metaquest</link><guid isPermaLink="true">https://meta-xr-sdk.hashnode.dev/palm-ui-using-palmmenu-in-metaquest</guid><category><![CDATA[metaquest]]></category><category><![CDATA[unity]]></category><category><![CDATA[Augmented Reality]]></category><category><![CDATA[Mixed Reality]]></category><category><![CDATA[Virtual Reality]]></category><dc:creator><![CDATA[Takashi Yoshinaga]]></dc:creator><pubDate>Tue, 01 Jul 2025 00:33:24 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751333699336/bcc9bd8c-7ffd-4e26-a94d-d99d3bc86d39.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-0-contents-of-this-article">0. Contents of This Article</h2>
<p>This article introduces how to implement PalmMenu that displays UI on the palm and operates it with fingers of the other hand in Meta Quest. PalmMenu can achieve more natural interaction that appeals to the sense of touch compared to floating UI in mid-air, as you actually trace or tap the palm to operate it, making it a very useful feature.<br />You can also check the operation in the 07-PalmMenu or 07-PalmMenu-AR scene of the <a target="_blank" href="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples">sample</a> published on GitHub.</p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=cbm4VepVm2I"><img src="https://img.youtube.com/vi/cbm4VepVm2I/0.jpg" alt="PalmMenu" /></a></p>
<p>*This video is the AR version but supports both AR/VR.</p>
<p>This article proceeds based on VR or AR scenes created in the following articles.</p>
<p><strong>[VR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/displaying-objects-in-vr-with-metaquest">Displaying Objects in MetaQuest</a></p>
<p><strong>[AR Version]</strong></p>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/ar-display-using-metaquest-passthrough-feature">AR Display Using MetaQuest Passthrough</a></p>
<h2 id="heading-1-duplicating-the-scene">1. Duplicating the Scene</h2>
<p>While it's possible to edit the scene created in the previous article, to try PalmMenu without destroying the existing scene, I'll introduce how to duplicate the scene. Skip this if unnecessary.</p>
<ul>
<li>Open a VR or AR compatible scene</li>
<li>Click File -&gt; Save As... to save the current scene with a new name<br />*This article uses PalmMenu</li>
<li>Confirm that the scene name displayed in Hierarchy is PalmMenu</li>
</ul>
<h2 id="heading-2-scene-preparation">2. Scene Preparation</h2>
<ul>
<li>Delete the Cube used in the duplicate source as it's unnecessary</li>
<li>Enter <strong>PalmMenu</strong> in the Project tab search area</li>
<li>Select <strong>All</strong> from Search: directly under the search area</li>
<li>Two PalmMenus will be found, but select the one stored in the following directory<br /><strong>Packages/com.meta.xr.sdk.interaction.ovr/Runtime/Sample/Prefabs/</strong><br />*Folder name is displayed at the bottom of the Project tab</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/00.jpg?raw=true" alt="PalmMenu Prefab Selection Screen" /></p>
<ul>
<li>Drag and drop PalmMenu prefab into Hierarchy</li>
<li>Right-click in the empty space of Hierarchy</li>
<li>Click UI -&gt; EventSystem</li>
<li>Confirm that EventSystem has been added to Hierarchy</li>
<li>Select EventSystem and display Inspector</li>
<li>Click Add Component at the bottom of Inspector</li>
<li>Search for <strong>Pointable Canvas Module</strong> and add</li>
<li>Right-click PalmMenu object</li>
<li>To make editing easier later, click <strong>Prefab -&gt; Unpack Completely</strong></li>
</ul>
<h2 id="heading-3-palmmenu-settings">3. PalmMenu Settings</h2>
<h3 id="heading-hand-ref-settings">Hand Ref Settings</h3>
<p>PalmMenu has two Hand Refs attached to link with hand tracking status, but Hand is unset with None. Associate these with left and right hand information.</p>
<p><strong>[Associate first Hand Ref with left hand]</strong></p>
<ul>
<li>Open <strong>OVRInteractionComprehensive</strong> child element of OVRCameraRig object</li>
<li>Confirm that there's <strong>LeftInteractions</strong> as its child element</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/01.jpg?raw=true" alt="LeftInteractions Confirmation Screen" /></p>
<ul>
<li>Click PalmMenu</li>
<li>Drag and drop <strong>LeftInteractions</strong> to Hand in the first Hand Ref</li>
</ul>
<p><strong>[Associate second Hand Ref with right hand]</strong></p>
<ul>
<li>Open OVRInteractionComprehensive child element of OVRCameraRig object</li>
<li>Confirm that there's <strong>RightInteractions</strong> as its child element</li>
<li>Click PalmMenu</li>
<li>Drag and drop <strong>RightInteractions</strong> to Hand in the second Hand Ref</li>
</ul>
<h3 id="heading-dominant-hand-game-object-filter-settings">Dominant Hand Game Object Filter Settings</h3>
<p>Next, specify objects (fingertips) that can interact with UI in the Dominant Hand Game Object Filter attached to PalmMenu.</p>
<p><strong>[Register left hand fingertip object]</strong></p>
<ul>
<li>Open OVRInteractionComprehensive child element of OVRCameraRig object</li>
<li>Further open child elements in this order: <strong>LeftInteractions -&gt; Interactors -&gt; Hand</strong></li>
<li>Confirm that there's <strong>HandPokeInteractor</strong> as a child element of Hand</li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/02.jpg?raw=true" alt="HandPokeInteractor Confirmation Screen" /></p>
<ul>
<li>Click PalmMenu</li>
<li>Drag and drop <strong>HandPokeInteractor</strong> to Element 0 directly under <strong>LeftHandedGameObjects</strong> in Dominant Hand Game Object Filter</li>
</ul>
<p><strong>[Register right hand fingertip object]</strong></p>
<ul>
<li>Open OVRInteractionComprehensive child element of OVRCameraRig object</li>
<li>Further open child elements in this order: <strong>RightInteractions -&gt; Interactors -&gt; Hand</strong></li>
<li>Confirm that there's <strong>HandPokeInteractor</strong> as a child element of Hand</li>
<li>Click PalmMenu</li>
<li>Drag and drop <strong>HandPokeInteractor</strong> to Element 0 directly under <strong>RightHandedGameObjects</strong> in Dominant Hand Game Object Filter</li>
</ul>
<p><strong>[Left Hand Settings]</strong></p>
<p>In Left Hand of Dominant Hand Game Object Filter, you need to explicitly specify the Hand Ref associated with the left hand.</p>
<ul>
<li>Drag and drop PalmMenu to the area next to <strong>Left Hand</strong></li>
<li>When a dialog appears, select <strong>HandRef associated with LeftInteractions</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/03.jpg?raw=true" alt="HandRef Selection Dialog" /></p>
<h2 id="heading-4-display-object-settings">4. Display Object Settings</h2>
<p>When URP is selected, sample objects prepared may not display correctly due to material errors. Finally, adjust the sample objects.</p>
<ul>
<li>Create Material anywhere in the Assets folder<br /><em>This article sets the name as <em>*CtrlObjMaterial</em></em></li>
<li>Click <strong>ControlledObject</strong> child element of PalmMenu</li>
<li>Drag and drop <strong>CtrlObjMaterial</strong> to the area marked <strong>Default-Material</strong> next to <strong>Element0</strong> in MeshRenderer</li>
</ul>
<h2 id="heading-5-testing-operation">5. Testing Operation</h2>
<p>With the settings up to this point, you can operate the menu displayed on the left palm with fingers of the other hand. Also, menu display/hide can be toggled with tapping using the left thumb and index finger.</p>
<p>The PalmMenu prefab has pre-implemented object manipulation, but you can implement your own features by arranging this as a base. For details, refer to the <strong>Menu</strong> child element of PalmMenu.<br />For example, Unity's <strong>ScrollView</strong> is used for UI behavior, so you need to learn how to use this. Also, the <strong>PalmMenuExample</strong> script attached to the Menu object is helpful for more detailed behavior descriptions.</p>
<h2 id="heading-6-bonus-display-toggle-by-palm-orientation">6. Bonus: Display Toggle by Palm Orientation</h2>
<p>This time we toggled menu display with left thumb and index finger tapping, but you can also display the menu only when the palm faces toward you. I'll introduce this as an arrangement example of this sample.</p>
<h3 id="heading-palm-orientation-detection-settings">Palm Orientation Detection Settings</h3>
<ul>
<li>Pay attention to <strong>Menu</strong> child element of PalmMenu</li>
<li><strong>Disable</strong> <strong>OVR Button Active State</strong></li>
<li>Click Add Component at the bottom of Menu's Inspector</li>
<li>Search for <strong>Transform Recognizer Active State</strong> and add</li>
<li>Drag and drop <strong>LeftInteractions</strong> child element of OVRInteractionComprehensive to Hand in Transform Recognizer Active State</li>
<li>Drag and drop <strong>Features</strong> child element of LeftInteractions to <strong>Transform Feature State Provider</strong></li>
<li>Change <strong>Transform Feature Configs</strong> to <strong>Palm Towards Face</strong></li>
<li>Open TransformConfig and set <strong>DefaultTransformFeatureStateThresholds.asset</strong> to <strong>Feature Thresholds</strong>
*Search for DefaultTransformFeatureStateThresholds.asset in Project tab. (Select Search: All as search option)</li>
</ul>
<h3 id="heading-displayhide-toggle-settings">Display/Hide Toggle Settings</h3>
<ul>
<li>Find <strong>ActiveState Selector</strong> in Menu object's Inspector</li>
<li>Drag and drop Menu object to <strong>Active State</strong></li>
<li>If the following dialog appears, select <strong>TransformRecognizerActiveState</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/04.jpg?raw=true" alt="ActiveState Selection Dialog" /></p>
<ul>
<li>Find <strong>SelectorUnityEventWrapper</strong> in Menu object's Inspector</li>
<li>Delete events set in <strong>When Unselected</strong> with - button</li>
<li>Click + button for both <strong>When Selected</strong> and <strong>When Unselected</strong></li>
<li>Drag and drop <strong>Visuals</strong> child element of Menu object to <strong>None</strong> area in each event</li>
<li>Click <strong>No Function</strong> in <strong>When Selected</strong></li>
<li>Click <strong>GameObject -&gt; SetActive</strong></li>
<li>Check <strong>On</strong></li>
<li>Click <strong>No Function</strong> in <strong>When Unselected</strong></li>
<li>Click <strong>GameObject -&gt; SetActive</strong></li>
<li>Check <strong>Off</strong></li>
</ul>
<p><img src="https://github.com/TakashiYoshinaga/MetaXR-SDK-Samples/blob/main/Documents/materials/11/05.jpg?raw=true" alt="Event Settings Screen" /></p>
<p>Now the menu will only be displayed when the palm faces toward you.</p>
<h2 id="heading-7-complete-list-of-meta-xr-sdk-articles">7. Complete List of Meta XR SDK Articles</h2>
<p><a target="_blank" href="https://meta-xr-sdk.hashnode.dev/introduction">Meta XR SDK Series Index</a></p>
]]></content:encoded></item></channel></rss>