73.6K Views
May 12, 24
スライド概要
可視化技術や人間計測/空間計測技術を活用した問題解決に関する研究開発。 ARコンテンツ作成勉強会(tryAR)を主催。
XREAL Light/Air開発入門
自己紹介 氏名:吉永崇 (Takashi Yoshinaga) 仕事:AR/VR応用に関するR&D。主に医療支援 ウェアラブル・モーションキャプチャ技術開発 活動:ARコンテンツ作成勉強会(#tryAR) 趣味:ARを用いたプロトタイピング お問い合わせ・ご質問はこちら! https://twitter.com/Taka_Yoshinaga
ARコンテンツ作成勉強会の紹介 2013年5月に勉強会をスタート。 ARコンテンツの作り方をハンズオン形式で学ぶ 人数は5~10名程度の少人数で実施 参加条件はAR/VRに興味がある人(知識不要) 各地で開催 (福岡、熊本、宮崎、長崎、大分、 鹿児島、山口、広島、札幌、関東)
Twitterと勉強会ページで情報を発信しています @AR_Fukuoka Googleで「AR勉強会」で検索
ハッシュタグ #tryAR #xreal
今日の内容 XREAL Light / Airのコントローラを使った コンテンツ開発の基本手順を解説
今日のゴール https://youtu.be/uyxVuTEpdJw
演習用素材のダウンロード https://github.com/TakashiYoshinaga/ARFukuoka/raw/main/Nreal3DoF_20220429/Samples.zip
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作 オブジェクト 配置
ハンズオン手順 Unityプロジェクトの作成 エミュレータ NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作 実機
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作 リセットボタン
ハンズオンスタート
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作 オブジェクト 配置
Unity Hub起動 Unity Hub
プロジェクトの作成 (1/6) ①Projects ②New Project
プロジェクトの作成 (2/6) Editor Versionを開く
プロジェクトの作成 (3/6) 2019.4.X以降 この資料は2020.3.xを前提に解説をしています
プロジェクトの作成 (4/6) ①3D ②Project name ③保存場所
プロジェクトの作成 (5/6) Create project
プロジェクトの作成 (6/6) Unity Editorが起動すればOK
表示オブジェクトのインポート (1/5) Assets
表示オブジェクトのインポート (2/5) ①Import Package ②Custom Package
表示オブジェクトのインポート (3/5) Samplesフォルダ Scan.unitypackage
表示オブジェクトのインポート (4/5) Import
表示オブジェクトのインポート (5/5) ScanフォルダができればOK
表示オブジェクトをシーンに追加 (1/4) BreadをHierarchy にドラッグ&ドロップ Bread
表示オブジェクトをシーンに追加 (2/4) 小さすぎてBread が見えない?
表示オブジェクトをシーンに追加 (3/4) Breadをダブルクリック
表示オブジェクトをシーンに追加 (4/4) クローズアップされる
ハンズオン手順 Unityプロジェクトの作成 エミュレータ NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション ヘッドトラッキングの活用 何もないところでのクリック検知 uGUI操作 実機
プラットフォームの設定 (1/4) ①File ②Build Settings
プラットフォームの設定 (2/4) ①Androidを選択 ②Switch Platform
プラットフォームの設定 (3/4) Androidに切り替わる
プラットフォームの設定 (4/4) 閉じる
NRSDKのインストール (1/5) ①Assets ②Import Package ③Custom Package
NRSDKのインストール (2/5) NRSDKをダブルクリック 最新版は2.2.0 (2024年5月12日現在)
NRSDKのインストール (3/5) Import
NRSDKのインストール (4/5) このウィンドウが出た場合は Accept Allをクリック
NRSDKのインストール (4/5) NRSDKフォルダができればOK
XREAL用カメラの設定 (1/3) Main Cameraを削除
XREAL用カメラの設定 (2/3) Assets → NRSDK → Prefabs
XREAL用カメラの設定 (3/3) Hierarchyにドラッグ&ドロップ NRCameraRig
表示出力の確認 Gameタブをドラッグして右に移動 (次頁参照)
表示出力の確認 (1/2) こんな感じ
表示出力の確認 (2/2) カメラとCGが同じ位置(0,0,0) にあるため何も見えない状態
オブジェクトの位置を調整 (1/4) ①Breadをクリック ②Positionを下記に変更 0,-0.08,0.8
オブジェクトの位置を調整 (2/4) Breadが視界内に表示 BreadがSceneからフレームアウトするかも
オブジェクトの位置を調整 (3/4) Breadをダブルクリック
オブジェクトの位置を調整 (4/4) 視点が調整され、カメラとの位置関係も確認可能
Sceneの視点調整 カメラが手前に来るようにSceneの視点を 変えると実行画面と比較しやすいかもしれない
現状を保存 Ctrl/command + S
エミュレーターで動作確認 (1/4) Play
エミュレーターで動作確認 (2/4) [W][S]: 前後移動 [A][D]: 左右移動 [Space]+ドラッグ:首振り
エミュレーターで動作確認 (3/4) 再度Playをクリックして停止
エミュレーターで動作確認 (4/4) 再生ボタンが青くなければOK
コントローラの追加 (1/2) Assets → NRSDK → Prefabs
コントローラの追加 (2/2) Hierarchyにドラッグ&ドロップ NRInput
エミュレーターでのコントローラ使用 (1/5) Play
エミュレーターでのコントローラ使用 (2/5) コントローラオブジェクト コントローラ画面 ※実際はスマホ画面に表示される
エミュレーターでのコントローラ使用 (3/5) ①Gameタブ内をクリック ②Shiftを押したままマウスカーソルを 動かすとポインタも連動して動く
エミュレーターでのコントローラ使用 (4/5) ①Shiftから指を離すと ポインタは動かなくなる ②コントローラ画面をクリックすると ●が表示されクリックしたことがわかる
エミュレーターでのコントローラ使用 (5/5) 停止
補足:3DoFを前提に開発 (for Light) ①NRCameraRig ②NRHMD Pose Trackerの TrackingTypeを[3DoF]に変更 ※今回は不要
実機で動作確認 (1/7) NRSDK
実機で動作確認 (2/7) Project Tips
実機で動作確認 (3/7) SDKインストール時に 設定した場合には不要 Accept All
実機で動作確認 (4/7) Close Window
実機で動作確認 (5/7) スマホ/コンピュータユニットとPCを接続
実機で動作確認 (6/7) ①File ②Build And Run
実機で動作確認 (7/7) ①インストーラー名 ②保存
動作確認 インストールが済んだらXREALとスマホを接続し Nebulaからアプリを起動
動作確認 オブジェクトが表示される
シーンを名前を付けて保存 (1/3) ①File ②Save As
シーンを名前を付けて保存 (2/3) ①Scene名をSample␣0 ②保存
シーンを名前を付けて保存 (3/3) ①Assets ②Sample 0があることを確認
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
シーンの複製 (1/4) Sample 0を選択して Ctrl + D
シーンの複製 (2/4) Sample 1が生成される
シーンの複製 (3/4) Sample 1をダブルクリック
シーンの複製 (4/4) Sample 1に切り替わればOK
スクリプトの追加 (1/5) ①Bread ②Add Component
スクリプトの追加 (2/5) ①検索エリアを空に ②New Script
スクリプトの追加 (3/5) ①スクリプト名:TapAndRotate ②Create and Add
スクリプトの追加 (4/5) TapAndRotateが追加される AssetsフォルダにもTapAndRotate.csファイルができる
スクリプトの追加 (5/5) TapAndRotateをダブルクリック
オブジェクト回転のスクリプト記述 public class TapAndRotate : MonoBehaviour { //回転速度(初期値: 20 deg/sec) public float speed = 20.0f; //初期化で使用(今回は使わない) void Start(){ } //毎フレーム更新 void Update() { //Rotate(x軸,y軸,z軸,回転基準) transform.Rotate( 0, speed * Time.deltaTime, 0, Space.World); } }
現状を保存 ソースコードを保存 Ctrl/command + S
動作確認 Play
動作確認 回転する ここで速度を変更
動作確認 停止
回転On/Offの条件を追加 //回転速度(初期値: 20 deg/sec) public float speed = 20.0f; //回転のOn/Off bool rotate = false; //初期化で使用(今回は使わない) void Start(){ } //毎フレーム更新 trueになるまで回転しない void Update() { if (rotate) { transform.Rotate( 0, speed * Time.deltaTime, 0, Space.World); } }
コントローラでオブジェクトをクリック (1/6) using UnityEngine; //NRSDKの読み込み using NRKernal; //クリックなどのイベント検出 using UnityEngine.EventSystems; public class TapAndRotate : MonoBehaviour { //回転速度(初期値: 20 deg/sec) public float speed = 20.0f; //回転のOn/Off bool rotate = false; void Start(){ } void Update() { if (rotate) {/*スペースの都合により省略*/} } }
コントローラでオブジェクトをクリック (2/6) using UnityEngine; using NRKernal; using UnityEngine.EventSystems; クリック関連のインターフェース public class TapAndRotate : MonoBehaviour, IPointerClickHandler { //回転速度(初期値: 20 deg/sec) public float speed = 20.0f; //回転のOn/Off bool rotate = false; void Start(){ } void Update() { if (rotate) {/*スペースの都合により省略*/} } }
コントローラでオブジェクトをクリック (3/6) IpointerClickHandlerにカーソルを合わせる ヒントの中から「インターフェイスを実装」を選択 ※上記が表示されない場合は次のページへ
コントローラでオブジェクトをクリック (4/6) OnPointerClick関数が追加される ※自動で追加されない場合は手入力でOnPointerClickを実装
コントローラでオブジェクトをクリック (5/6) using UnityEngine; using NRKernal; using UnityEngine.EventSystems; public class TapAndRotate : MonoBehaviour, IPointerClickHandler { //回転速度(初期値: 20 deg/sec) public float speed = 20.0f; //回転のOn/Off OnPointerClick関数内のコードを削除 bool rotate = false; //このスクリプトが貼られたオブジェクトクリックすると呼ばれる関数 public void OnPointerClick(PointerEventData eventData) { throw new System.NotImplementedException(); } void Start(){ } void Update(){/*スペースの都合により省略*/} }
コントローラでオブジェクトをクリック (6/6)
using UnityEngine;
using NRKernal;
using UnityEngine.EventSystems;
public class TapAndRotate : MonoBehaviour, IPointerClickHandler
{
//回転速度(初期値: 20 deg/sec)
public float speed = 20.0f;
//回転のOn/Off
回転用フラグのOn/Offを切り替え
bool rotate = false;
//このスクリプトが貼られたオブジェクトクリックすると呼ばれる関数
public void OnPointerClick(PointerEventData eventData)
{
rotate = !rotate;
}
void Start(){ }
void Update(){/*スペースの都合により省略*/}
}
現状を保存 ソースコードを保存 Ctrl/command + S
動作確認 Play
動作確認 Shift + ドラッグでポインタを 移動してオブジェクトに合わせる
動作確認 Shiftから一旦指を離す
動作確認 コントローラ画面上でマウスクリック
動作確認 いくらクリックしても回転しない!
動作確認 停止
原因 ポインターとの接触判定を行う コライダーがCG側に設定されていない ※Cubeとかのサンプルでは初めからコライダーが設定されているので忘れがち
コライダーの設定 (1/4) Breadをクリック
コライダーの設定 (2/4) Add Component
コライダーの設定 (3/4) Boxで検索 Box Collider
コライダーの設定 (4/4) Center: 0 0.05 0 Size: 0.2 0.1 0.2 ※上記パラメーターは一例です
現状を保存 Ctrl/command + S
動作確認 Play
動作確認 ポインターを合わせる コントローラ画面をクリック
動作確認 今度は回転する ※再クリックで停止
動作確認(動画) https://youtu.be/uyxVuTEpdJw?si=w6j1ertfoUKoYDPK&t=11
動作確認 停止
動作確認(動画) https://youtu.be/uyxVuTEpdJw?si=w6j1ertfoUKoYDPK&t=11
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
現状を保存 Unityのシーンの現状を保存 Ctrl/command + S
プロジェクトの複製 (1/3) Sample 1を選択して Ctrl/command + D
プロジェクトの複製 (2/3) Sample 2をダブルクリック
プロジェクトの複製 (3/3) Sample 2になっていればOK
不要なスクリプトの削除 (1/2) Bread TapAndRotate横の
不要なスクリプトの削除 (2/2) Remove Component
新規スクリプトの追加 (1/4) Add Component
新規スクリプトの追加 (2/4) 検索エリアを空に New script
新規スクリプトの追加 (3/4) Script名: Manipulation Create and Add
新規スクリプトの追加 (4/4) Manipulationが追加される Manipulationをダブルクリック
コントローラ押下と解放の検知 (1/5) using UnityEngine; using NRKernal; using UnityEngine.EventSystems; public class Manipulation : MonoBehaviour ,IPointerDownHandler, IPointerUpHandler { void Start() { コントローラ押下開始 } void Update() { } } コントローラ押下終了
コントローラ押下と解放の検知 (2/5) IpointerDownHandlerにカーソルを合わせる ヒントの中からインターフェイスを実装を選択 ※上記が表示されない場合は次のページへ
補足 ※自動で追加されない場合は手入力でOnPointerDownを実装
コントローラ押下と解放の検知 (3/5) IpointerUpHandlerにカーソルを合わせる ヒントの中からインターフェイスを実装を選択 ※上記が表示されない場合は次のページへ
補足 public void OnPointerUp(PointerEventData eventData) { throw new System.NotImplementedException(); } ※自動で追加されない場合は手入力でOnPointerUPを実装
コントローラ押下と解放の検知 (4/5) public class Manipulation : MonoBehaviour , IPointerDownHandler, IPointerUpHandler { public void OnPointerDown(PointerEventData eventData) { throw new System.NotImplementedException(); } public void OnPointerUp(PointerEventData eventData) { throw new System.NotImplementedException(); } void Start() { } void Update() { } }
コントローラ押下と解放の検知 (5/5)
public class Manipulation : MonoBehaviour
, IPointerDownHandler, IPointerUpHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Down");
}
public void OnPointerUp(PointerEventData eventData)
{
Debug.Log("Up");
}
void Start()
{
}
void Update()
{
}
}
現状を保存 ソースコードを保存 Ctrl/command + S
動作確認 Console
動作確認 Play ポインタをオブジェクトに合わせる
動作確認 Shiftから手を離す コントローラをゆっくりクリック
動作確認 ボタンを押下したタイミングと離したタイミングでそれぞれ文字が表示
動作確認 停止
不要なコードを削除
public class Manipulation : MonoBehaviour
, IPointerDownHandler, IPointerUpHandler
{
public void OnPointerDown(PointerEventData eventData)
{
Debug.Log("Down");
}
public void OnPointerUp(PointerEventData eventData)
{
Debug.Log("Up");
}
void Start()
{
}
void Update()
{
}
}
コントローラ押下でオブジェクト移動 親要素を切り替えることでコントローラへの追従のOn/Offを切り替える 選択 押下 Breadの親要素なし(=3D空間) コントローラがBreadの親 押下
コントローラ押下でオブジェクト移動 (1/5) //コントローラの位置・姿勢 (あとでUnityEditorから指定) public Transform controller; //デフォルトの(マニピュレーションしていない時の)親オブジェクト public Transform base_parent; public void OnPointerDown(PointerEventData eventData) { //このオブジェクトの親をコントローラにする(コントローラに追従) transform.parent = controller; } public void OnPointerUp(PointerEventData eventData) { //このオブジェクトをコントローラから解放する transform.parent = base_parent; } void Start() { //最初にこのオブジェクトの初期状態の親Transformを覚えさせておく base_parent = transform.parent; }
現状を保存 Ctrl/command + S
コントローラ押下でオブジェクト移動 (2/5) スクリプトとUnityEditor上の コントローラを関連づけよう
コントローラ押下でオブジェクト移動 (3/5) NRInput → Right → ControllerTrack → ModelAnchorを見つける
コントローラ押下でオブジェクト移動 (4/5) Breadをクリック Manipulationに注目
コントローラ押下でオブジェクト移動 (5/5) ModelAncor Controllerに ドラッグ&ドロップ
動作確認 Play
動作確認 オブジェクトにポインタを合わせる
動作確認 ①Shiftから指を離す ②Shiftを押してコントローラ画面上をドラッグ
動作確認 https://youtu.be/uyxVuTEpdJw?si=37zqqFeivLbDkLBD&t=29
動作確認 停止
実機での動作の様子 https://youtu.be/uyxVuTEpdJw?si=37zqqFeivLbDkLBD&t=29
オブジェクトの前後移動 (1/3) public Transform base_parent; //コントローラで選択されているかどうか bool selected = false; public void OnPointerDown(PointerEventData eventData) { //ポインターを合わせてボタンを押したら選択 selected = true; //このオブジェクトの親をコントローラにする(コントローラに追従) transform.parent = controller; } public void OnPointerUp(PointerEventData eventData) { //指を離したら選択解除 selected = false; //このオブジェクトをコントローラから解放する transform.parent = base_parent; }
オブジェクトの前後移動 (2/3)
//コントローラで選択されているかどうか
bool selected = false;
//移動速度
public float moveSpeed = 0.08f;
public void OnPointerDown(PointerEventData eventData){ 略 }
public void OnPointerUp(PointerEventData eventData){ 略 }
void Start(){ 略 }
void Update()
{
if (!selected) return;
1
//タッチ位置を取得し、yの絶対値>0.6なら前後移動
Vector2 p = NRInput.GetTouch();
if (Mathf.Abs(p.y) > 0.6f)
{
transform.Translate(Mathf.Sign(p.y) * controller.forward
-1
* moveSpeed * Time.deltaTime);
}
}
オブジェクトの前後移動 (3/3)
//コントローラで選択されているかどうか
bool selected = false;
//移動速度
public float moveSpeed = 0.08f;
public void OnPointerDown(PointerEventData eventData){ 略 }
public void OnPointerUp(PointerEventData eventData){ 略 }
void Start(){ 略 }
void Update()
{
if (!selected) return;
//タッチ位置(-1~1)を取得し、yの絶対値>0.6なら前後移動
Vector2 p = NRInput.GetTouch();
if (Mathf.Abs(p.y) > 0.6f)
{
transform.Translate(Mathf.Sign(p.y) * controller.forward
* moveSpeed * Time.deltaTime);
}
}
動作確認 Play
動作確認 ポインターをオブジェクトに合わせる コントローラ画面の上か下周辺でクリック
動作確認 ポインターの前後方向に移動
動作確認 https://youtu.be/uyxVuTEpdJw?si=ElkwoYB1T4exC1OR&t=36
動作確認 停止
オブジェクトの左右回転
//移動速度
public float moveSpeed = 0.08f;
//回転速度
public float rotSpeed = -20.0f;
/*中略*/
void Update()
{
if (!selected) return;
//タッチ位置(-1~1)を取得し、xyの絶対値が0.6以上なら移動/回転
Vector2 p = NRInput.GetTouch();
if (Mathf.Abs(p.y) > 0.6f){ /* 略(前後移動) */ }
else if (Mathf.Abs(p.x) > 0.6f)
{
transform.Rotate(0, Mathf.Sign(p.x) * rotSpeed *
Time.deltaTime, 0, Space.Self );
}
}
動作確認 Play
動作確認 ポインターをオブジェクトに合わせる コントローラ画面の右か左周辺をクリック
動作確認 回転もできるようになる
動作確認 停止
ここまでの成果(エミュレーター)
ここまでの成果(実機) https://youtu.be/uyxVuTEpdJw?si=ElkwoYB1T4exC1OR&t=36
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作
現状を保存 Ctrl/command + S
プロジェクトの複製 (1/4) Sample 2をCtrl/command + D
プロジェクトの複製 (2/4) Sample 3が生成される
プロジェクトの複製 (3/4) Sample 3をダブルクリック
プロジェクトの複製 (4/4) Sample 3に切り替わればOK
不要なオブジェクトを削除 Breadを削除
サンプルのインポート (1/4) Assets → Import Package → Custom Package
サンプルのインポート (2/4) ARShooter.unitypackage
サンプルのインポート (3/4) Import
サンプルのインポート (4/4) Shooterが追加されていればOK
壁を表示 (1/8) Hierarchyの何もないところを右クリック
壁を表示 (2/8) Crate Empty
壁を表示 (3/8) ①GameObject ②名前をWallに変更
壁を表示 (4/8) Positionを 0 -0.2 2 ※壁が表示される位置
壁を表示 (5/8) Shooter
壁を表示 (6/8) WallのInspectorに ドラッグ&ドロップ WallScriptに注目 ※クリックしない
壁を表示 (7/8) WallScriptが追加される
壁を表示 (8/8) CubePrefabに ドラッグ&ドロップ Cubeに注目 (クリックしない)
動作確認 Play
動作確認 壁が表示される
動作確認 停止
弾を発射するスクリプトを作成 (1/5) NRInput → Right → ControllerTrack → ModelAnchorを見つける [補足] 弾を発射したいオブジェクトに次頁で作るスクリプトを貼り付ける。 例としてコントローラを指定しているが、NRCameraRig内の CenterAnhorに貼れば頭から発射も可能
弾を発射するスクリプトを作成 (2/5) Add Component
弾を発射するスクリプトを作成 (3/5) 検索エリアを空に New script
弾を発射するスクリプトを作成 (4/5) Script名: ShootBullet Create and Add
弾を発射するスクリプトを作成 (5/5) ShootBulletが追加される
発射スクリプトの記述 (1/6) ①Assets ②ShootBulletをダブルクリック
発射スクリプトの記述 (2/6) using UnityEngine; using NRKernal; public class ShootBullet : MonoBehaviour { //発射する弾の元データ public GameObject bulletPrefab; //実際に空間に放たれる弾 GameObject bullet; void Start() { } void Update() { } }
発射スクリプトの記述 (3/6)
void Start()
{
NRInput.AddClickListener(
//右手or左手の指定
ControllerHandEnum.Right,
//コントローラの押した箇所に対応するアクションを記述
ControllerButton.TRIGGER, () => {
//既に弾を発射している場合は一旦削除
if (bullet != null) DestroyImmediate(bullet);
//弾を作って発射位置にセット
bullet = GameObject.Instantiate(bulletPrefab);
bullet.transform.position = transform.position;
//下記設定で力を加える
bullet.GetComponent<Rigidbody>().AddForce(
transform.forward * 8, ForceMode.Impulse);
}
);
}
現状を保存 ソースコードを保存 Ctrl/command + S
発射スクリプトの記述 (4/6) NRInput → Right → ControllerTrack → ModelAnchor
発射スクリプトの記述 (5/6) Shooter
発射スクリプトの記述 (6/6) BulletPrefabに ドラッグ&ドロップ Bulletに注目 (クリックしない)
動作確認 Play
動作確認 弾が発射される
動作確認
動作確認 停止
ハンズオン手順 Unityプロジェクトの作成 NRSDKの基礎 オブジェクトのクリック検知 オブジェクトのマニピュレーション 何もないところでのクリック検知 uGUI操作 リセットボタン
リセットボタンを追加 (1/5) Shooter
リセットボタンを追加 (2/5) Hierarchyに ドラッグ&ドロップ Canvas
リセットボタンを追加 (3/5) Canvas CanvasのRenderModeが WorldSpaceとなっていることを確認
リセットボタンを追加 (4/5) Add Component
リセットボタンを追加 (5/5) Canvas Raycast Canvas Raycast Target
リセット機能を呼び出す (1/9) Canvasを開く
リセット機能を呼び出す (2/9) Buttonをクリック
リセット機能を呼び出す (3/9) Buttonを見つける On Clickを見つける
リセット機能を呼び出す (4/9) Wallを見つける (クリックしない)
リセット機能を呼び出す (5/9) OnClickにドラッグ&ドロップ
リセット機能を呼び出す (6/9) ドロップダウンメニューを開く
リセット機能を呼び出す (7/9) ①WallScript ②ResetWall
リセット機能を呼び出す (8/9) NRInput → Right → ControllerTracker → LaserRaycaster
リセット機能を呼び出す (9/9) Mask Type: Inclusive Mask: UI
動作確認 https://youtu.be/uyxVuTEpdJw?si=v0kF11CDsHaPoN8Q&t=68
参考 • クイックスタート https://xreal.gitbook.io/nrsdk/nrsdkfundamentals/quickstart-for-android • コントローラ詳細 https://xreal.gitbook.io/nrsdk/nrsdkfundamentals/xreal-devices/controller • 前回のNreal Lightハンズオン https://www.slideshare.net/ssuserc0d7fb/nreallight • 今回のプロジェクト https://github.com/TakashiYoshinaga/XREALSampl eScenes