<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kazuhiro Hara™</title>
    <description>The latest articles on DEV Community by Kazuhiro Hara™ (@kara_d_en).</description>
    <link>https://dev.to/kara_d_en</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F803900%2F52223d75-6001-4de9-82da-457bb575e025.jpg</url>
      <title>DEV Community: Kazuhiro Hara™</title>
      <link>https://dev.to/kara_d_en</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kara_d_en"/>
    <language>en</language>
    <item>
      <title>Upgrading to NRSDK 1.8.0 - MR Tutorial</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Tue, 26 Apr 2022 08:36:53 +0000</pubDate>
      <link>https://dev.to/kara_d_en/upgrading-to-nrsdk-180-mr-tutorial-1npg</link>
      <guid>https://dev.to/kara_d_en/upgrading-to-nrsdk-180-mr-tutorial-1npg</guid>
      <description>&lt;p&gt;Until now, the tutorials have been based on NRSDK 1.7.0. Currently, the latest NRSDK version is 1.8.0. This section explains what you need to do to upgrade an old SDK. &lt;/p&gt;

&lt;p&gt;I also upgraded &lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HelloWorld"&gt;HelloWorld tutorial&lt;/a&gt; while writing this explanation. I will be upgrading the other samples soon.&lt;/p&gt;

&lt;p&gt;NRSDK version 1.8.0 and later have different documentation URLs. Check the following documents as well.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nreal.gitbook.io/nrsdk/discover/readme"&gt;Learn Nreal Glasses - NRSDK&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First, download NRSDK 1.8.0 from the following link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.nreal.ai/download"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ghVTtLNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jjkt4trel6kunmt3yojx.png" alt="Download NRSDK 1.8.0" width="880" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Upgrade
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Display &lt;code&gt;Project&lt;/code&gt; &amp;gt; &lt;code&gt;Assets&lt;/code&gt;, right click on &lt;code&gt;NRSDK&lt;/code&gt; to show the context menu.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Delete&lt;/code&gt; for deleting Old NRSDK.&lt;/li&gt;
&lt;li&gt;Right-click on &lt;code&gt;Assets&lt;/code&gt; to display the context menu, then select &lt;code&gt;Import Package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package...&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt; you have downloaded from the file dialog.&lt;/li&gt;
&lt;li&gt;Please follow the usual dialog instructions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After performing this upgrade, you can build your project to build an executable &lt;code&gt;.apk&lt;/code&gt; on Nreal Air.&lt;/p&gt;

&lt;p&gt;If it does not work on your Nreal Air device, select &lt;code&gt;NRCameraRig&lt;/code&gt;, open the &lt;code&gt;Inspector&lt;/code&gt; panel and go to &lt;code&gt;NR Session Behaviour&lt;/code&gt; &amp;gt; &lt;code&gt;Session Config&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lYCzoD1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b38h6gja00ln6ppfcnaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYCzoD1z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b38h6gja00ln6ppfcnaq.png" alt="Session Config Panel" width="880" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check that &lt;code&gt;Target Devices&lt;/code&gt; is checked for both &lt;code&gt;Nreal Light&lt;/code&gt; and &lt;code&gt;Nreal Air&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy the new version of the NRSDK!&lt;/p&gt;

</description>
      <category>mixedreality</category>
      <category>unity3d</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Images and words (Image detection sample) - MR Tutorial for Nreal Light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Sun, 03 Apr 2022 11:43:16 +0000</pubDate>
      <link>https://dev.to/kara_d_en/images-and-words-image-detection-sample-mr-tutorial-for-nreal-light-2j03</link>
      <guid>https://dev.to/kara_d_en/images-and-words-image-detection-sample-mr-tutorial-for-nreal-light-2j03</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MSniQewT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7l9dennfrwnl6jfwy2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MSniQewT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7l9dennfrwnl6jfwy2b.png" alt="Image of the completed version" width="880" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This sample displays the message "Detected" when the prepared image comes into view. Learn how to detect images by creating a very simple sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/ImagesAndWords"&gt;mr-tutorials-for-nreal-light/ImagesAndWords at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone sample repository, Change current directory to &lt;code&gt;ImagesAndWords&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Prepare tracking images
&lt;/h3&gt;

&lt;p&gt;Prepare a sample image for image detection. Multiple images can be set for image detection. The sample is provided as an image named “ImageDetect.png”. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put it to &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;Scene&lt;/code&gt; .&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Create TrackingImageDatabase
&lt;/h3&gt;

&lt;p&gt;Image detection requires a database with registered images for image detection.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select yout tracking Images, and display context menu with right click. &lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;TrackingImageDatabase&lt;/code&gt; . Then a &lt;code&gt;TrackingImageDatabase&lt;/code&gt; will be created.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Create SessionConfig
&lt;/h3&gt;

&lt;p&gt;Register the database you just created in SessionConfig.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Move to &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;Scene&lt;/code&gt; , and select  &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;SessionConfig&lt;/code&gt; then create SessionConfig.&lt;/li&gt;
&lt;li&gt;Select the &lt;code&gt;NRKernalSessionConfig&lt;/code&gt; you just created and open &lt;code&gt;Inspector&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;Enable &lt;code&gt;Image Tracking Mode&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;Drag  &lt;code&gt;TrackingImageDatabase&lt;/code&gt; to &lt;code&gt;Tracking Image Database&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Set SessionConfig to NRCameraRig
&lt;/h3&gt;

&lt;p&gt;The place to register &lt;code&gt;SessionConfig&lt;/code&gt; is in &lt;code&gt;NRCameraRig&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select  &lt;code&gt;Hierarchy&lt;/code&gt; &amp;gt; &lt;code&gt;NRCameraRig&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Drag &lt;code&gt;NRKernalSessionConfig&lt;/code&gt; to &lt;code&gt;Session Config&lt;/code&gt;  on &lt;code&gt;Inspector&lt;/code&gt; &amp;gt; &lt;code&gt;NR Session Behaviour&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Create C# Script for image detection
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "IconDetect.cs". Write the code as follows.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal.NRExamples&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Icon Detect class using Trackable Images&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;IconDetect&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trackable image list&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;NRTrackableImage&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;m_NewMarkers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;NRTrackableImage&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Display trackable status&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Searching"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;NRFrame&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetTrackables&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;NRTrackableImage&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;m_NewMarkers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NRTrackableQueryFilter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;New&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;m_NewMarkers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Count&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;NRTrackableImage&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m_NewMarkers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetCenterPose&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
            &lt;span class="c1"&gt;// If you use NRAnchor, uncomment the following&lt;/span&gt;
            &lt;span class="c1"&gt;// NRAnchor anchor = image.CreateAnchor();&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Detected"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Put Canvas and Text on the scene
&lt;/h3&gt;

&lt;p&gt;Put &lt;code&gt;Text&lt;/code&gt; object for displaying the cube rotation value.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;Text&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change Text to “Info” on &lt;code&gt;Inspector&lt;/code&gt; panel.&lt;/li&gt;
&lt;li&gt;Attach &lt;code&gt;IconDetect.cs&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel of &lt;code&gt;Canvas&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Text&lt;/code&gt; to &lt;code&gt;Text&lt;/code&gt; Text Object.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  8. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  9. Test your application by displaying images for image detection
&lt;/h3&gt;

&lt;p&gt;Display the image for image detection on your own smartphone or PC and view the image in Nreal Light. Make sure the text displayed in Nreal Light goes from Searching to Detected.&lt;/p&gt;

</description>
      <category>mixedreality</category>
      <category>tutorial</category>
      <category>unity3d</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Rotator (Sample of grabbing an object and rotating it) - MR Tutorial for Nreal Light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Tue, 15 Mar 2022 11:46:32 +0000</pubDate>
      <link>https://dev.to/kara_d_en/rotator-mr-tutorial-for-nreal-light-5e02</link>
      <guid>https://dev.to/kara_d_en/rotator-mr-tutorial-for-nreal-light-5e02</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XwjQvp4M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vez4uf8a9jorz6tciozo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XwjQvp4M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vez4uf8a9jorz6tciozo.png" alt="Image of the completed version" width="880" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, let's rotate the GameObject touched around the palm of your right hand. This tutorial is a continuation of the "Hold Me Tight" tutorial. If you have not yet comple "Hold Me Tight", please proceed with the following tutorial first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HoldMeTight"&gt;mr-tutorials-for-nreal-light/HoldMeTight&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;mr-tutorials-for-nreal-light/Rotator at main · karad/mr-tutorials-for-nreal-light &lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/Rotator"&gt;https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/Rotator&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;Rotator&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Place the TargetCube a little closer
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;TargetCube1&lt;/code&gt; from &lt;code&gt;Hierarchy&lt;/code&gt; &amp;gt; &lt;code&gt;Target&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Pos z&lt;/code&gt; to 0.6&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Change C# script TargetCube.cs
&lt;/h3&gt;

&lt;p&gt;Modify the C# script to reflect the right hand rotation on the TargetCube. Change the &lt;code&gt;TargetCube.cs&lt;/code&gt; code as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Target Cube Script&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TargetCube&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;MeshRenderer&lt;/span&gt; &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Awake&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Get mesh renderer&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetComponent&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MeshRenderer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Enter Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerEnter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;material&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Stay Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerStay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Get right hand rotation value&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;Quaternion&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipRotation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetJointPose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandJointID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Palm&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Quaternion&lt;/span&gt; &lt;span class="n"&gt;targetRotation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;targetRotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipRotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;targetRotation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Exit Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerExit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exit!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;material&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Change C# script HandController.cs
&lt;/h3&gt;

&lt;p&gt;Next, let's also modify the right hand controller. Change the touch point from index finger to palm. Change the &lt;code&gt;HandController.cs&lt;/code&gt; code as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Hand Controller for Tip&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HandController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// IndexTip GameObject&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;GameObject&lt;/span&gt; &lt;span class="n"&gt;hand_R_IndexTip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Get Right Hand&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Get Index Tip Position of right hand&lt;/span&gt;
        &lt;span class="n"&gt;Vector3&lt;/span&gt; &lt;span class="n"&gt;handStatePalmPosition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetJointPose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandJointID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Palm&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;// Set Hand R IndexTip Sphere position&lt;/span&gt;
        &lt;span class="n"&gt;hand_R_IndexTip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStatePalmPosition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Create a display area for rotation value
&lt;/h3&gt;

&lt;p&gt;Let's also create a display area to get a numerical value for the right hand rotation value. Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "DisplayInfo.cs". Write the code as follows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Display about user actions&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DisplayInfo&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Numeric display of right hand palm rotation value&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;!=&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetJointPose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandJointID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Palm&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;rotation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Put Text on the scene
&lt;/h3&gt;

&lt;p&gt;Put Text object for displaying the cube rotation value.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;Text&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change Text to “Info” on &lt;code&gt;Inspector&lt;/code&gt; panel.&lt;/li&gt;
&lt;li&gt;Attach &lt;code&gt;DisplayInfo.cs&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel of &lt;code&gt;Canvas&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;info&lt;/code&gt; to &lt;code&gt;Info&lt;/code&gt; Text Object.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Run the tutorial
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Play&lt;/code&gt; button and run the tutorial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mixedreality</category>
      <category>unity3d</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Hold Me Tight (Sample of using Grab to grab and move an object) - MR Tutorial for Nreal Light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Fri, 11 Mar 2022 22:25:13 +0000</pubDate>
      <link>https://dev.to/kara_d_en/hold-me-tight-mr-tutorial-for-nreal-light-3b6o</link>
      <guid>https://dev.to/kara_d_en/hold-me-tight-mr-tutorial-for-nreal-light-3b6o</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ZjMW0Jh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lmpf5juk4xvm4821bsl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ZjMW0Jh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lmpf5juk4xvm4821bsl.png" alt="Completion screen of sample" width="880" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's try to grab the touched GameObject and move it. This tutorial is a continuation of the "U Can Touch This" tutorial. If you have not yet comple "U Can Touch This", please proceed with the following tutorial first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/UCanTouchThis"&gt;U Can Touch This - MR Tutorial for Nreal Light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;mr-tutorials-for-nreal-light/HoldMeTight at main · karad/mr-tutorials-for-nreal-light &lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HoldMeTight"&gt;https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HoldMeTight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;HoldMeTight&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. First, complete "U Can Touch This"
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;First, complete "U Can Touch This". This tutorial will continue with "U Can Touch This". You can also start by cloning the sample repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Check “Is Trigger” on “TargetCube1”
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;TargetCube1&lt;/code&gt; from &lt;code&gt;Target&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Is Trigger&lt;/code&gt; from Inspector Panel. By checking this box, you can trigger events when you touch game objects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Chenge C# Script
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open C# Script “TargetCube.cs” on &lt;code&gt;Assets&lt;/code&gt; panel.&lt;/li&gt;
&lt;li&gt;Change the code as follows.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Target Cube Script&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TargetCube&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;MeshRenderer&lt;/span&gt; &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Awake&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetComponent&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MeshRenderer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Display event log using console&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="collision"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnCollisionEnter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collision&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hit!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Enter Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerEnter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;material&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Stay Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerStay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Get Right Hand&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;currentGesture&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;HandGesture&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Grab&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Get Index Tip Position of right hand&lt;/span&gt;
            &lt;span class="n"&gt;Vector3&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipPosition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetJointPose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandJointID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IndexTip&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="c1"&gt;// Set Hand R IndexTip Sphere position&lt;/span&gt;
            &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipPosition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Trigger Exit Event Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="other"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnTriggerExit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collider&lt;/span&gt; &lt;span class="n"&gt;other&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Exit!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;meshRender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;material&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Color&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Run the tutorial
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;Play&lt;/code&gt; button and run the tutorial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mixedreality</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>U Can Touch This (Sample of Touch a cube object with your hand) - MR Tutorial for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Fri, 25 Feb 2022 08:11:10 +0000</pubDate>
      <link>https://dev.to/kara_d_en/u-can-touch-this-mr-tutorial-for-nreal-light-4k8j</link>
      <guid>https://dev.to/kara_d_en/u-can-touch-this-mr-tutorial-for-nreal-light-4k8j</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kK6Tyd-B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjejg69jisdegg7ffjah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kK6Tyd-B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjejg69jisdegg7ffjah.png" alt="Image description" width="880" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Touch the object with the index finger of your right hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/UCanTouchThis"&gt;mr-tutorials-for-nreal-light/UCanTouchThis at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;UCanTouchThis&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Setting for HandTracking to NRInput
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;NRInput&lt;/code&gt; , and change &lt;code&gt;Input Source Type&lt;/code&gt; to &lt;code&gt;Hands&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_R&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Right&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_L&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Left&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Disable NRHandPointer_R
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;NRHandPointer_R&lt;/code&gt; from &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Right&lt;/code&gt; &amp;gt; &lt;code&gt;NRHand_R&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;li&gt;Disable &lt;code&gt;NRHandPointer_R&lt;/code&gt; from Inspector Panel.&lt;/li&gt;
&lt;li&gt;Do the same settings for the Left hand (&lt;code&gt;NRHandPointer_L&lt;/code&gt;) .&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Create empty game objects
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an empty game object in the Scene with the name "HandController".&lt;/li&gt;
&lt;li&gt;Also, create an empty game object in the Scene with the name "Target".&lt;/li&gt;
&lt;li&gt;Set each GameObject's positions to 0.

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Make Alpha material
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create Material on  &lt;code&gt;Assets&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Change name to “AlphaMaterial”&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Rendering Mode&lt;/code&gt; item to &lt;code&gt;Fade&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Create Sphere for hand tracking
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Sphere&lt;/code&gt; in &lt;code&gt;HandController&lt;/code&gt;.

&lt;ol&gt;
&lt;li&gt;Change name to “Hand_R_IndexTip”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.03 , &lt;code&gt;Y&lt;/code&gt; : 0.03 , &lt;code&gt;Z&lt;/code&gt; : 0.03&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Add component &lt;code&gt;Ridgitbody&lt;/code&gt; .

&lt;ol&gt;
&lt;li&gt;Uncheck &lt;code&gt;Use Gravity&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Set a material “AlphaMaterial” to &lt;code&gt;Materials&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  7. Create C# script for hand tracking extension
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "HandController.cs".&lt;/li&gt;
&lt;li&gt;Write the code as follows.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Hand Controller for Tip&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HandController&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// IndexTip GameObject&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;GameObject&lt;/span&gt; &lt;span class="n"&gt;hand_R_IndexTip&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Get Right Hand&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="c1"&gt;// Get Index Tip Position of right hand&lt;/span&gt;
        &lt;span class="n"&gt;Vector3&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipPosition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetJointPose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandJointID&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IndexTip&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="c1"&gt;// Set Hand R IndexTip Sphere position&lt;/span&gt;
        &lt;span class="n"&gt;hand_R_IndexTip&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStateThumbTipPosition&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. Attach the C# script on “HandController”
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Attach "HandController.cs" to “HandController” game object

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;hand_R_IndexTip&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel to “Hand_R_IndexTip” game object from the scene.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  9. Create Cube as a target object
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Cube&lt;/code&gt; in &lt;code&gt;Target&lt;/code&gt;.

&lt;ol&gt;
&lt;li&gt;Change name to “TargetCube1”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0.1, &lt;code&gt;Pos Y&lt;/code&gt; : -0.05, &lt;code&gt;Pos Z&lt;/code&gt; : 0.8&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.1 , &lt;code&gt;Y&lt;/code&gt; : 0.1 , &lt;code&gt;Z&lt;/code&gt; : 0.1&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Add component &lt;code&gt;Ridgitbody&lt;/code&gt; .

&lt;ol&gt;
&lt;li&gt;Uncheck &lt;code&gt;Use Gravity&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  10. Create C# script for target game object
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "TargetCube.cs".&lt;/li&gt;
&lt;li&gt;Write the code as follows.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;/// Target Cube Script&lt;/span&gt;
&lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TargetCube&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Display event log using console&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="collision"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnCollisionEnter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Collision&lt;/span&gt; &lt;span class="n"&gt;collision&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Debug&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hit!"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  11. Attach the C# script on “Target”
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Attach "TargetCube.cs" to “TargetCube1” game object.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  12. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mixedreality</category>
      <category>csharp</category>
      <category>tutorial</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>Pinch Strength using HandTracking - MR Tutorial for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Tue, 15 Feb 2022 09:39:39 +0000</pubDate>
      <link>https://dev.to/kara_d_en/pinch-strength-using-handtracking-mr-tutorial-for-nreal-light-2878</link>
      <guid>https://dev.to/kara_d_en/pinch-strength-using-handtracking-mr-tutorial-for-nreal-light-2878</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89n0kvsetfae8d4vd5ko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89n0kvsetfae8d4vd5ko.png" alt="Image of the completed version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Measure the strength of your left and right hand hand tracking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/PinchStrength" rel="noopener noreferrer"&gt;mr-tutorials-for-nreal-light/PinchStrength at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;PinchStrength&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download" rel="noopener noreferrer"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download" rel="noopener noreferrer"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Setting for HandTracking to NRInput
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;NRInput&lt;/code&gt; , and change &lt;code&gt;Input Source Type&lt;/code&gt; to &lt;code&gt;Hands&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_R&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Right&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_L&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Left&lt;/code&gt; on the Scene.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Put a Canvas in the scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set property on &lt;code&gt;Inspector&lt;/code&gt; panel

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Render Mode&lt;/code&gt; : World Space&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0 , &lt;code&gt;Pos Y&lt;/code&gt; : -0.35 &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.005 , &lt;code&gt;Y&lt;/code&gt; : 0.005 , &lt;code&gt;Z&lt;/code&gt; : 0.005&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Put Slider in Canvas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Slider&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt; with the name "PinchStrengthBarRight”.

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;Pos X&lt;/code&gt; : 100, &lt;code&gt;Pos Y&lt;/code&gt; : 50, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;li&gt;Change the &lt;code&gt;Background&lt;/code&gt; Color of the child of &lt;code&gt;PinchStrengthBarRight&lt;/code&gt; to "#FF0000".&lt;/li&gt;
&lt;li&gt;Change the &lt;code&gt;Fill Area&lt;/code&gt; &amp;gt; &lt;code&gt;Fill&lt;/code&gt; Color of the child of &lt;code&gt;PinchStrengthBarRight&lt;/code&gt; to "#00FF44".&lt;/li&gt;
&lt;li&gt;Change the Rect Transform of &lt;code&gt;Fill Area&lt;/code&gt; , Set &lt;code&gt;Left&lt;/code&gt; of &lt;code&gt;Rect Transform&lt;/code&gt; to "0", and set &lt;code&gt;Right&lt;/code&gt; to "0" as well.&lt;/li&gt;
&lt;li&gt;disable &lt;code&gt;Handle Slide Area&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Duplicate &lt;code&gt;PinchStrengthBarRight&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;Change name to “PinchStrengthBarLeft”&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Pos X&lt;/code&gt; : -100, &lt;code&gt;Pos Y&lt;/code&gt; : 50, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Create an empty GameObject and attach C# script to it.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an empty GameObject on &lt;code&gt;Hierarchy&lt;/code&gt; with the name &lt;code&gt;BaseGameObject&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;Create the following C# script named &lt;code&gt;PinchStrength&lt;/code&gt; and attach it to the empty GameObject you just created.

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;Pinch Strength Right Hand&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel to &lt;code&gt;PinchStrengthBarRight&lt;/code&gt; on the scene.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Pinch Strength Left Hand&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel to &lt;code&gt;PinchStrengthBarLeft&lt;/code&gt; on the scene.
&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;NRKernal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PinchStrength&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Pinch Strength Bar for Left Hand&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Slider&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthLeftHand&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Pinch Strength Bar for Right Hand&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Slider&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthRightHand&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handStateRight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RightHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthRight&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStateRight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pinchStrength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;pinchStrengthRightHand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthRight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;HandState&lt;/span&gt; &lt;span class="n"&gt;handStateLeft&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;NRInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Hands&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetHandState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HandEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LeftHand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthLeft&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;handStateLeft&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pinchStrength&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;pinchStrengthLeftHand&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;value&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pinchStrengthLeft&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mixedreality</category>
      <category>unity3d</category>
      <category>csharp</category>
      <category>nreal</category>
    </item>
    <item>
      <title>HandTracking - MR Tutorial for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Mon, 14 Feb 2022 07:48:12 +0000</pubDate>
      <link>https://dev.to/kara_d_en/handtracking-mr-tutorial-for-nreal-light-10ij</link>
      <guid>https://dev.to/kara_d_en/handtracking-mr-tutorial-for-nreal-light-10ij</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fau2m8s2w62c5dubgkhdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fau2m8s2w62c5dubgkhdu.png" alt="Image of the completed version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simple HandTracking tutorial. Use hand tracking to pinch to increase the count!&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HandTracking" rel="noopener noreferrer"&gt;mr-tutorials-for-nreal-light/HandTracking at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;HandTracking&lt;/code&gt; . And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download" rel="noopener noreferrer"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.8.0 from &lt;a href="https://developer.nreal.ai/download" rel="noopener noreferrer"&gt;Download | Nreal&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.8.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Setting for HandTracking to NRInput
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;code&gt;NRInput&lt;/code&gt; , and change &lt;code&gt;Input Source Type&lt;/code&gt; to &lt;code&gt;Hands&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_R&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Right&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Put &lt;code&gt;NRHand_L&lt;/code&gt; from &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;NRSDK&lt;/code&gt; &amp;gt; &lt;code&gt;Prefabs&lt;/code&gt; &amp;gt; &lt;code&gt;Hands&lt;/code&gt; to &lt;code&gt;NRInput&lt;/code&gt; &amp;gt; &lt;code&gt;Left&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Create Material
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;Material&lt;/code&gt; on &lt;code&gt;Assets&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;Change name to “TouchCubeMaterial”&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Albedo&lt;/code&gt; to “CC0000”&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Put Cube in the Scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Cube&lt;/code&gt; in the Scene

&lt;ol&gt;
&lt;li&gt;Change name to “TouchCube”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 8&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  5. Put a Canvas in the scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set property on &lt;code&gt;Inspector&lt;/code&gt; panel

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Render Mode&lt;/code&gt; : World Space&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0 , &lt;code&gt;Pos Y&lt;/code&gt; : -0.35 &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.005 , &lt;code&gt;Y&lt;/code&gt; : 0.005 , &lt;code&gt;Z&lt;/code&gt; : 0.005&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Put Text in Canvas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Text&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt; with the name "Counter”.

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : -30, &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Text&lt;/code&gt; to “0”&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Color&lt;/code&gt; to “FFCC00”&lt;/li&gt;
&lt;li&gt;Change Font size to 30&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  7. Create C# Script in Assets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "HandTrack.cs".&lt;/li&gt;
&lt;li&gt;Write the code as follows
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.UI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HandTrack&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IPointerClickHandler&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Counter Text GameObject&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt; &lt;span class="n"&gt;targetText&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Counter value&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// HandTracking Click Handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="eventData"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnPointerClick&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PointerEventData&lt;/span&gt; &lt;span class="n"&gt;eventData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;++;&lt;/span&gt;
        &lt;span class="n"&gt;targetText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="c1"&gt;//throw new System.NotImplementedException();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. Attach the C# script on “TouchCube”
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Attach "HandTrack.cs" to “TouchCube”

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;Target Text&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel to &lt;code&gt;Counter&lt;/code&gt; on the scene.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  9. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>mixedreality</category>
      <category>csharp</category>
      <category>nreal</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>Check size of a lot of cubes on Nreal light - MR Tutorial for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Sat, 12 Feb 2022 09:18:45 +0000</pubDate>
      <link>https://dev.to/kara_d_en/check-size-of-a-lot-of-cubes-on-nreal-light-mr-tutorial-for-nreal-light-1858</link>
      <guid>https://dev.to/kara_d_en/check-size-of-a-lot-of-cubes-on-nreal-light-mr-tutorial-for-nreal-light-1858</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93om6qaob4kwv8jrz69k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F93om6qaob4kwv8jrz69k.png" alt="Image of the completed version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This sample is to see what size you can actually feel by placing many 1x1x1 cubes in the space.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/CubeSize" rel="noopener noreferrer"&gt;mr-tutorials-for-nreal-light/CubeSize at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;CubeSize&lt;/code&gt; . And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage" rel="noopener noreferrer"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage" rel="noopener noreferrer"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Put a Cube in the scene and convert it to Prefab
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt; , create &lt;code&gt;Resource&lt;/code&gt; folder in &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;Scenes&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;Cube&lt;/code&gt; on current scene, change name to &lt;code&gt;MyCube&lt;/code&gt; . &lt;/li&gt;
&lt;li&gt;Drag &lt;code&gt;MyCube&lt;/code&gt; to &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;Scenes&lt;/code&gt; &amp;gt; &lt;code&gt;Resource&lt;/code&gt; folder.&lt;/li&gt;
&lt;li&gt;Delete &lt;code&gt;MyCube&lt;/code&gt; from &lt;code&gt;Hierarchy&lt;/code&gt; .&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Create an empty GameObject and attach C# script to it.
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an empty GameObject on &lt;code&gt;Hierarchy&lt;/code&gt; with the name &lt;code&gt;BaseCubeSize&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;Create the following C# script named &lt;code&gt;CubeSize&lt;/code&gt; and attach it to the empty GameObject you just created.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CubeSize&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Cube PreFab&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="n"&gt;GameObject&lt;/span&gt; &lt;span class="n"&gt;spherePrefab&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Initial Position for cube layout&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="n"&gt;Vector3&lt;/span&gt; &lt;span class="n"&gt;INITIAL_POSITION&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.0f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;0.35f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Number of Cubes list per axis&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;DEPTH&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;20f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Space for each Cubes&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;SPAN&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;2f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;spherePrefab&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Resources&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Load&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;GameObject&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;"MyCube"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;LayoutCubes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DEPTH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SPAN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Layout Cubes&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="depth"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="span"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;LayoutCubes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="c1"&gt;// Exclude own position&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;2f&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nf"&gt;CreateCube&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Put a cube  in the current scene&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="x"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="y"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="z"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;CreateCube&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;float&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;GameObject&lt;/span&gt; &lt;span class="n"&gt;sphere&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;Instantiate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;spherePrefab&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;sphere&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;position&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;INITIAL_POSITION&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INITIAL_POSITION&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;INITIAL_POSITION&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>nreal</category>
      <category>mixedreality</category>
      <category>unity3d</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cube Rotation - MR Tutorial for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Wed, 09 Feb 2022 23:35:01 +0000</pubDate>
      <link>https://dev.to/kara_d_en/cube-rotation-mr-tutorial-for-nreal-light-4cg6</link>
      <guid>https://dev.to/kara_d_en/cube-rotation-mr-tutorial-for-nreal-light-4cg6</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34y5mr8q07rz3fmjxuvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F34y5mr8q07rz3fmjxuvq.png" alt="Image of the completed version"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/CubeRotation" rel="noopener noreferrer"&gt;mr-tutorials-for-nreal-light/CubeRotation at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;CubeRotation&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage" rel="noopener noreferrer"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings" rel="noopener noreferrer"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage" rel="noopener noreferrer"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Put a Canvas in the scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set property on &lt;code&gt;Inspector&lt;/code&gt; panel

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Render Mode&lt;/code&gt; : World Space&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0 , &lt;code&gt;Pos Y&lt;/code&gt; : -0.35 &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.005 , &lt;code&gt;Y&lt;/code&gt; : 0.005 , &lt;code&gt;Z&lt;/code&gt; : 0.005&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  3. Put Text in Canvas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Text&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : -30, &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Change Text to “Rotate Cube” on &lt;code&gt;Inspector&lt;/code&gt; panel.&lt;/li&gt;

&lt;li&gt;Change Color to “FFFFFF” on &lt;code&gt;Inspector&lt;/code&gt; panel.&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  4. Create C# Script in Assets
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;C# Script&lt;/code&gt; in the asset with the file name "RotateButton.cs".&lt;/li&gt;
&lt;li&gt;Write the code as follows
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;UnityEngine.EventSystems&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;RotateButton&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IPointerUpHandler&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IPointerDownHandler&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Target Object&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;GameObject&lt;/span&gt; &lt;span class="n"&gt;TargetCube&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Rotation Type&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;RotationTypeEnum&lt;/span&gt; &lt;span class="n"&gt;RotationType&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Number of rotations at a time&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;ROTATE&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Press flag&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isPressed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Rotation Type Enum&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;enum&lt;/span&gt; &lt;span class="n"&gt;RotationTypeEnum&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;LEFT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;RIGHT&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Start is called before the first frame update&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Update is called once per frame&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isPressed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RotationType&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;RotationTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RIGHT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;TargetCube&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ROTATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RotationType&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="n"&gt;RotationTypeEnum&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LEFT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;TargetCube&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Vector3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ROTATE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// Pointer up event handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="eventData"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnPointerUp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PointerEventData&lt;/span&gt; &lt;span class="n"&gt;eventData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;isPressed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;///  Pointer down event handler&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;/// &amp;lt;param name="eventData"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnPointerDown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PointerEventData&lt;/span&gt; &lt;span class="n"&gt;eventData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;isPressed&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Put Cube in the Scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Cube&lt;/code&gt; in the Scene

&lt;ol&gt;
&lt;li&gt;Change name to “RotatableCube”&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 8&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  6. Put “Rotate Right” Button in Canvas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Button&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 60, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Width&lt;/code&gt; : 100&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Change Text to “Rotate Right” from nested &lt;code&gt;Text&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Attach the &lt;code&gt;RotateButton.cs&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel.

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;Target Cube&lt;/code&gt; to RotatableCube you just created.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Rotation Type&lt;/code&gt; to RIGHT.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  7. Put “Rotate Left” Button in Canvas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Button&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : -60, &lt;code&gt;Pos Y&lt;/code&gt; : 0, &lt;code&gt;Pos Z&lt;/code&gt; : 0&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Width&lt;/code&gt; : 100&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Change Text to “Rotate Left” from nested &lt;code&gt;Text&lt;/code&gt;.&lt;/li&gt;

&lt;li&gt;Attach the &lt;code&gt;RotateButton.cs&lt;/code&gt; on &lt;code&gt;Inspector&lt;/code&gt; panel.

&lt;ol&gt;
&lt;li&gt;Set &lt;code&gt;Target Cube&lt;/code&gt; to RotatableCube you just created.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;Rotation Type&lt;/code&gt; to LEFT.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  8. Build
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>nreal</category>
      <category>tutorial</category>
      <category>mixedreality</category>
      <category>unity3d</category>
    </item>
    <item>
      <title>Hello World - MR Tutorials for Nreal light</title>
      <dc:creator>Kazuhiro Hara™</dc:creator>
      <pubDate>Tue, 08 Feb 2022 06:40:10 +0000</pubDate>
      <link>https://dev.to/kara_d_en/hello-world-mr-tutorial-for-nreal-light-5aej</link>
      <guid>https://dev.to/kara_d_en/hello-world-mr-tutorial-for-nreal-light-5aej</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nqfzc572--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o68vacl4p4mr9rx3izq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nqfzc572--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o68vacl4p4mr9rx3izq0.png" alt="Image of the completed version" width="880" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sample Repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karad/mr-tutorials-for-nreal-light/tree/main/HelloWorld"&gt;mr-tutorials-for-nreal-light/HelloWorld at main · karad/mr-tutorials-for-nreal-light&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run the sample
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Clone Sample Repository, Change current directory to &lt;code&gt;HelloWorld&lt;/code&gt;. And Open with Unity.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Build Setting&lt;/code&gt;, change Platform to &lt;code&gt;Android&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check &lt;code&gt;Build Settings&lt;/code&gt; &amp;gt; &lt;code&gt;Player Settings&lt;/code&gt; by referring to &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Configure Build Settings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Setting up the project for Nreal development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;See &lt;a href="https://nreal.gitbook.io/nrsdk-documentation/discover/quickstart-for-android#configure-build-settings"&gt;Quickstart for Android - NRSDK Documentation&lt;/a&gt; and configure the build settings.&lt;/li&gt;
&lt;li&gt;(If you don't have NRSDK) Download NRSDK 1.7.0 from &lt;a href="https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage"&gt;https://nreal-public.nreal.ai/download/NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Project&lt;/code&gt;, select &lt;code&gt;Assets&lt;/code&gt; &amp;gt; &lt;code&gt;import package&lt;/code&gt; &amp;gt; &lt;code&gt;Custom Package&lt;/code&gt; and import &lt;code&gt;NRSDKForUnityAndroid_1.7.0.unitypackage&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  2. Put a Canvas in the scene
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Canvas&lt;/code&gt; from &lt;code&gt;Create&lt;/code&gt; &amp;gt; &lt;code&gt;UI&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Set property on &lt;code&gt;Inspector&lt;/code&gt; panel

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Render Mode&lt;/code&gt; : World Space&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0 , &lt;code&gt;Pos Y&lt;/code&gt; : -0.35 &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Scale&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;X&lt;/code&gt; : 0.005 , &lt;code&gt;Y&lt;/code&gt; : 0.005 , &lt;code&gt;Z&lt;/code&gt; : 0.005&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  3. Put Text in Canvas
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Put &lt;code&gt;Text&lt;/code&gt; as a child of &lt;code&gt;Canvas&lt;/code&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Pos X&lt;/code&gt; : 0, &lt;code&gt;Pos Y&lt;/code&gt; : 50, &lt;code&gt;Pos Z&lt;/code&gt; : 3&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;Change Text to "Hello World!" on Inspector panel.&lt;/li&gt;
&lt;li&gt;Change color of Text to &lt;code&gt;#fff&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  4. Build
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Press &lt;code&gt;Build&lt;/code&gt; form &lt;code&gt;Build Settings&lt;/code&gt; panel&lt;/li&gt;
&lt;li&gt;Install *.apk on Android or DevKit.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>nreal</category>
      <category>mixedreality</category>
      <category>unity3d</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
