30.7K Views
November 03, 24
スライド概要
Unity6とMETA XR SDKを利用する方法です。
内容
1.環境構築
2.Building Blockの利用
3.Building Blockでパススルーを設定する
4.手とコントローラーをPrefabから組み立てる
5.Interaction sdkを使う
6.Interaction SDKを自分で組み立てる
7.手とコントローラにつかむ設定を入れる
8.つかまれる側の設定
想定バージョンは下記のとおり
Unity 6000.0.28f1
Meta XR SDK 71.0.0
Meta XR Interaction SDK 71.0.0
Oculus XR Plugin 4.4.0
Meta Quest Link App 71.0.0.451.524
UNITY6とMETA XR SDKでQUESTアプリ開発 META XR SDK V69-V71 UPDATE : 2024-12-07
大久保 聡 Mail [email protected] Twitter @followapp
META XR SDKのその他情報 9章以降はこちらのスライドを参照ください。 https://www.docswell.com/s/Ovjang/ZP9V6X-MetaXRSDK66
目次 1. 環境構築 SDKパッケージ内容 プロジェクトの設定 2. Building Blockの利用 ハンドで物をつかむ コントローラーを使う 11. 遠くの物(Game Object)を選択する 12. Poke(指でさわって)でボタン操作 13. Direct touch UI(手でさわって選ぶUI)の作成 14. Curved UIの作成 15. Meta Horizon OS UI Setの利用 3. Building Blockでパススルーを設定する 16. Controller Handsの使い方 4. ハンドとコントローラーをプレハブから組み立てる 17. 手のポーズ(ジェスチャー)を認識させる 5. Interaction SDKを使う 18. パススルーをオリジナルのシーンに組み込む 6. Interaction SDKを自分で組み立てる 19. パススルーを動的に切り替える 7. ハンドとコントローラにつかむ設定を入れる 20. シーンモデルの利用 8. つかまれる側の設定 21. MRUK(MR Utility Kit)を自分で組み立てる 9. Hand Poseの作り方 22. Depth APIを試す 10. 反対側のハンドのポーズの作り方
目次 23. Depth APIを自分のプロジェクトに組み込む 36. Questのパフォーマンス(CPU/GPU)の設定 24. スぺーシャルアンカーによる位置合わせ 37. Application SpaceWarpでFPSを向上させる 25. 共有スペーシャルアンカーのサンプル実行 38. MX Ink(Quest用スタイラスペン)を使う 26. コロケーションディスカバリー 39. 実機でのDebug 27. 同じ空間で複数人がコラボレーション 40. Voice SDKで声をテキストに変える 28. ハンドとコントローラーのマルチモーダル(同時利用) 41. ガーディアンのバウンダリー(境界)表示を消す 29. XR Audioを試す 42. やってはいけないMeta Quest 30. コントローラーでの移動 43. 関連情報の紹介 31. コントローラーでテレポート移動 32. 音に合わせてコントローラーを振動させる 33. 現実のキーボードを仮想空間に表示させる 34. ワイドモーションモード(WMM)を利用する 35. OVR Metrics Toolでパフォーマンス測定
こんなときは ハンドトラッキングやコントローラーで物をつかみたい。 1-8章 現実空間の情報を利用したい。 20-24章 つかまれた、離されたタイミングを知りたい。 8章 物をつかんだ時にそれっぽい手の形でつかみたい。 9-10章 現実の物が手前にある場合に、パススルー映像の手前に表示 したい。 22-23章 ボタンを指で押したい。 12章 手とコントローラを同時に使いたい。 28章 UIを手やコントローラーで操作したい。 13-15章 3D空間音響を使いたい。 29章 コントローラーを使うが見た目は手にしたい。 仮想空間内を移動したい。 30-31章 16章 効果音にあわせてコントローラーを振動させたい。 32章 グーチョキパーなどのジェスチャーを認識させたい。 17章 現実のキーボードを仮想空間に持ち込みたい。 33章 パススルーで現実とMR(仮想を融合)を実現したい。 18-19章 ピンク色になるのをなんとかしたい。 8章のTips VRとMRを切り替えたい。 19章
1.環境構築
動作環境 環境設定については、PluginとProject Settingsの一部を入れていますが、細かな部分は解説されて いるHomeページがたくさんありますので省略します。 プロジェクトはURPで作成しています。 検証済みのバージョンの組み合わせは下記の通りです。 Unity Meta XR SDK Meta XR Interaction SDK Oculus XR Plugin Meta Quest Link App 6000.0.25f1 69.0.1 69.0.2 4.3.0 69.0.0.501.353 Unity Meta XR SDK Meta XR Interaction SDK Oculus XR Plugin Meta Quest Link App 6000.0.28f1 71.0.0 71.0.0 4.4.0 71.0.0.451.524
V69→V71の変更点の一部 Audio To Expressions機能は、ヘッドセットからのマイクのオーディオ ストリームを使用して、Meta の Face Tracking ブレンドシェイプまたは ARKit を使用した完全な顔のアニメーションを提供します。これにより、目や 眉毛を含む顔のアニメーションがはるかに自然になり、古いLipsync ライブラリと比較してアプリのメモリ が削減 され、CPU の負荷も小さくできます。 Mixed Reality Utility Kit (MRUK) は、Instant Placement、Destructible Mesh、および Scene Decorator の 機能を追加します。 Instant Placement : 完全なシーン検出を行わずに、Raycast を使用して UI パネルなどのオブジェクトを 簡単に配置できます。 Destructible Mesh : オブジェクトやポータルを隠すメッシュを作成し、Raycast を使用してそれを破壊で きる楽しい機能を提供します。 Scene Decorator : 壁にツタや床に草を生成するなど、シーン情報でフィルター処理された複数のオブジェク トを生成することができます。
V69→V71の変更点の一部 MSDK は、関節関連の動作情報を圧縮して送信することで体の動きを効率的にネットワーク化する方法を示し、一 般的なネットワーク プロバイダーと互換性のある新しいサンプルを github でリリースしました。 コロケーション検出機能により、Quest デバイスは近くにある他の Quest デバイスを検出し、最大 1024 バイト のデータをアドバタイズできます。コロケーション検出は、マッチメイキングのために他のデバイスを見つける方 法として使用できます。また、コロケーションを使うための共有空間アンカーの UUID を共有するためにも使用で きます。 機械学習を使用して物理環境内のキーボードを識別および追跡する、汎用追跡キーボードのサポート。 [ビルディングブロック] 新しい「カスタムマッチメイキング」ブロック
V69→V71の変更点の一部 OpenXR ハンド スケルトンのサポートが追加されました。SDK をインストールすると、新しい OpenXR スケルトンを有効にするプロンプトが表示されます。現在のOVRハンド スケルトンは、将 来のリリースで廃止される予定です。 Dynamic Resolutionの設定が、Quest2/Proと3/3Sで設定がわかれました。
SDKの提供方法の変更 v59以降、全部入りのOculus Integrationは廃止され、個別のパッケージとして提供されるようにな ります。また全部入りは、Meta XR All-in-One SDKヘルパーパッケージとして提供されます。 Meta XR SDKは、Unity Asset Store https://assetstore.unity.com/publishers/25353 からダ ウンロード可能です。
パッケージの内容① coreを基本に必要なものを足すスタイルです。 com.meta.xr.sdk.core カメラ リグ、タッチ コントローラー、ハンド トラッキング、コンポジション レイヤー、パススルー、アンカー、 シーン管理など、Meta XR ヘッドセットが提供する多くの重要な機能が含まれています。 com.meta.xr.sdk.interaction コントローラー、⼿、およびコントローラーを⼿としてレイ、ポーク、ロコモーション、グラブなどのインタラク ションを追加します。各インタラクションはモジュール式に設計されており、単純な VR アプリケーションと複雑 な VR アプリケーションの両⽅で動作します。インタラクション SDK には、⼿固有のインタラクション、ポーズ とジェスチャの検出、ビジュアルのデバッグなど、⼿専⽤の機能もあります。 com.meta.xr.sdk.interaction.ovr.samples プレーヤー リグの OVR バリアントを使⽤した、インタラクション SDK のサンプル シーン、プレハブ、アート ア セットが含まれています。 com.meta.xr.mrutilitykit シーンクエリー、グラフィカルヘルパー、シーンデバッガーなどのユーティリティとツール群が含まれます。 com.meta.xr.sdk.audio 頭部伝達関数 (HRTF) ベースのオブジェクトやアンビソニック空間化、室内⾳響シミュレーションなどの空間オー ディオ機能を提供します。これは、Oculus Spatializer プラグインの代替品です。 com.meta.xr.sdk.voice Voice SDKを使⽤してアプリに⾳声インタラクションを導⼊し、⼈々が周囲の環境や他の⼈々と対話するためのよ り⾃然かつ柔軟な⽅法でエクスペリエンスを強化します。
パッケージの内容② ソーシャルVRアプリ用のplatformが提供されます。 com.meta.xr.simulator Meta Quest ヘッドセットと機能のシミュレーションを可能にする、開発者向けに構築された軽量の OpenXR ラ ンタイムです。ヘッドセットを頻繁に着脱する必要がなく、アプリのテストとデバッグが可能になるため、⽇々の開 発が容易になり、テスト環境のセットアップを簡素化することで⾃動化のスケールアップに役⽴ちます。 com.meta.xr.sdk.platform プラットフォーム SDKを使⽤してソーシャル VR アプリケーションを作成します。SDK の個々のコンポーネント を使⽤して、マッチメイキング、DLC、アプリ内購⼊、クラウド ストレージ、ボイス チャット、カスタム アイテ ム、実績などをエクスペリエンスに追加します。 com.meta.xr.sdk.interaction.ovr このパッケージにより、Interaction SDK が OVRPlugin と連携できるようになります。OVRPlugin または Utilities パッケージを使⽤している場合は、このパッケージを使⽤します。
提供されているASSET① パッケージ構成とほぼ内容は重複しますが、用意されているAssetのくくりは下記のようになっていま す。Core SDKとInteraction SDKが基本となるAssetです。 Meta XR Core SDK VRのコア機能、コンポーネント、スクリプト、およびプラグインをまとめたもので、UnityにおけるMeta Questアプリ開発プロセスを 容易にするとともに、その質を向上させるためのものです。Unityとのシームレスな統合が可能になるほか、さまざまなレンダリング機 能、ソーシャルやコミュニティの構築、サンプルフレームワーク、オーディオ、およびアバターの開発サポートを活用するための一連の SDKがバンドルされています。既存の Oculus Integrations パッケージ内の VR フォルダーに相当します。 Meta XR Interaction SDK Essentials (Meta XR Interaction SDK) コントローラーとハンドのインタラクションと体の姿勢検出をエクスペリエンスに追加するコンポーネントのライブラリです。このパッ ケージには、コントローラーとハンドのインタラクションと体の姿勢検出に使用される Interaction SDK に固有のコンポーネントが含 まれています。このパッケージは、既存の Oculus Integrations パッケージ内の Interaction フォルダーに相当します。 Meta XR Interaction SDK (Meta XR Interaction SDK OVR Integration) Interaction SDK が OVRPlugin と連携できるようになります。OVRPlugin または Utilities パッケージを使用している場合は、この パッケージを使用します。コントローラーとハンドのインタラクションと体の姿勢検出をエクスペリエンスに追加するコンポーネントの ライブラリです。このパッケージには、コントローラーとハンドのインタラクションと体の姿勢検出に使用される Interaction SDK に 固有のコンポーネントが含まれています。このパッケージは、既存の Oculus Integrations パッケージ内の Interaction フォルダーに 相当します。 Meta MR Utility Kit 空間認識アプリを構築するときに一般的な操作を実行するための、Scene API 上に豊富なユーティリティ/ツールのセットを提供します。 これにより、物理世界に対して迅速かつ簡単にプログラミングできるようになります。
提供されているASSET② 空間オーディオ、音声でのコマンド入力、STT(Speech to text)などの機能が含まれるAssetです。 Meta XR Audio SDK Meta XR Audio SDK には、HRTF を備えた空間オーディオ レンダラー、アンビソニック オーディオ再生、イマーシブ環境を作成 するための室内音響など、イマーシブ アプリケーション向けの包括的な空間オーディオ機能が含まれています。 このパッケージは、既存の Oculus Integrations パッケージ内の Audio フォルダーに相当します。 Meta Voice SDK - Immersive Voice Commands アプリ エクスペリエンスに音声対話を導入できます。Voice SDK を使用すると、人々がアプリを操作するためのより自然かつ柔軟な 方法で AR/VR エクスペリエンスを強化できます。たとえば、音声コマンドによりコントローラーのアクションを 1 つのフレーズで ショートカットしたり、インタラクティブな会話によりアプリをより魅力的にしたりできます。 Meta Voice SDK - Telemetry Voice SDK の依存関係であり、VoiceSDK とその関連パッケージの動作に関するインサイトを提供し、すべてのユーザーのエクスペ リエンスを向上させることができます。Voice SDK を使用する場合、テレメトリ(製品の品質向上データ)をオプトイン(利用者の許諾) またはオプトアウト(利用者が拒否)できます。 Meta Voice SDK - Composer インタラクティブな会話を設計するための Wit.ai(自然言語処理を支援する無償のサービス) の新機能である Composer のサポートを 提供します。Composer は、インテントを理解し、クライアント側のアクションをトリガーし、会話の流れに基づいて静的または動 的応答を提供できるグラフベースのダイアログ デザイナーです。 Meta Voice SDK - Dictation アプリで音声をリアルタイムで効率的にテキストに書き写すことができます。ディクテーション機能は、音声コマンドに使用するよう に設計されているのではなく、テキスト入力モダリティとして使用するように設計されています。正規表現を使用して解析し、コマン ドの処理に使用することもできますが、テキストは人間が読める形式でフォーマットされます。 Meta XR Haptics SDK 触覚クリップを Quest コントローラーで再生。ハプティック クリップを再生すると、クリップに保存されている振動パターンに従っ てコントローラーが振動します。
提供されているASSET③ 開発時に利用できるシミュレーター、XRマルチプレイ用のAsset類などです。 Meta XR Simulator Meta Quest ヘッドセットと機能のシミュレーションを可能にする、開発者向けに構築された軽量 XR ランタイムです。ヘッドセッ トを頻繁に着脱する必要がなく、アプリのテストとデバッグが可能になるため、日常の開発が容易になり、テスト環境のセットアップ を簡素化することで自動化のスケールアップに役立ちます。 Meta XR Platform SDK ソーシャル VR アプリケーションを作成します。SDK の個々のコンポーネントを使用して、マッチメイキング、DLC、アプリ内購 入、クラウド ストレージ、ボイス チャット、カスタム アイテム、実績などをエクスペリエンスに追加します。 Meta XR SDK Shared Assets Meta integration SDKsのパッケージ全体で使用される共有アセットを提供します。他の Meta サンプルおよびパッケージで使用さ れる共有アセットを提供します。このパッケージは、スタンドアロン パッケージとしてではなく、他の Meta SDK への依存関係と して取得する必要があります。 Meta XR Utilities SDK Meta XR Utilities SDKは廃止され、Meta XR Core SDKに変更されました。
提供されているASSET④ 前述のAsset①~③のAssetをまとめたものになります。インストールすると下記のように がついて るものが全部インストールされます。 Meta XR All-in-One SDK Core SDK、Interaction SDK、Voice SDK、Platform SDK などのいくつかの SDK がバンドル
ASSETの購入(無料) Unity Asset Store https://assetstore.unity.com/publishers/25353 から、購入(Add to My Assets)します。 とりあえず全部を購入しておきます。
プロジェクトの作成 本資料では、URPでプロジェクトを作成します。 テンプレートからUniversal 3Dを選択し、プロジェクトを作成を選択します。
プラットフォームの切り替え Meta Quest用にAndroid Platformに切り替えを行います。 Build Profilesをメニューから開き、Androidを選択しSwitch Platformを押下します。
プロジェクトにASSETを追加 Package Managerを開き、My Assetsから購入したMeta SDKを検索します。
CORE SDKのインストール Meta XR Core SDKを選択し、Installします。
TIPS:サンプルプログラム Meta XR Core SDKのサンプルプログラムはこちらからインポートできます。
INTERACTION SDK のインストール Meta XR Interaction SDKをインストールします。
V71以降の対応 OVRハンドスケルトンの廃止に伴う選択肢が表示されます。新規プロジェクトの場合、OpenXRスケ ルトンを選択します。 V71 以降、Interaction SDK では OVR ハンド スケルトンが廃 止され、OpenXR スケルトンが採用されるようになりました。 OVR スケルトンのサポートは 2025 年初頭に廃止される予定で す。 新しいプロジェクトでは、OpenXR ハンド スケルトンを使用する ことを強くお勧めします。 アップグレードを実行すると、プレーヤー設定でスクリプト定義 ISDK_OPENXR_HAND が設定され、OVRRuntimeSettings の HandSkeleton バージョンが OVRHandSkeletonVersion.OpenXR に変更されます。 既存のプロジェクトでは、2024 年末まで OVR ハンド スケルト ンを引き続き使用できます。
TIPS:サンプルプログラム Meta XR Interaction SDKのサンプルプログラムはこちらからインポートできます。
TIPS : UISET EXAMPLES V69から、UISetExamplesというサンプルが追加されており、UI Setの使用方法を学ぶことができま す。
XR PLUGINのインポート Oculus XR PluginをUnity RegistryからV4.4.0をインポート。
XR PLUG-IN MANAGEMENTのインストール Project Settingsを開き、XR Plug-in Managementをインストールします。 (Oculus XR Pluginをインストールした際に自動でインストールされます。)
プロジェクト設定① Project Settingsから、XR Plug-in Managementの設定を行います。 PCの設定 Meta Quest(Android)の設定
プロジェクト設定② ターゲットデバイスを設定します。
META XR PROJECT SETUP TOOL Project SettingsのMeta XRにあるChecklistを確認し、Outstanding IssuesとRecommended Itemsを確認。WindowsプラットフォームとAndroidプラットフォームの推奨項目をチェックし対応 します。 う メニューから 呼び出す場合
2.BUILDING BLOCKSの利用
BUILDING BLOCKSで基本のシーン作成 Meta XR ToolsからBuilding Blocksを開きます。数がどんどん増えてます。
CAMERA RIGを配置する 新しいシーンを作成し、Main Cameraを削除します。 頭の部分に相当するCamera RigをドラッグアンドドロップでHierarchyに配置します。
原点を床位置に設定 [BuildingBlock] Camera Rigを選択し、OVR ManagerのOrigin TypeをFloor Level(デフォルト)に 設定します。
HAND TRACKINGを配置する 手に相当するHand TrackingをドラッグアンドドロップでHierarchyに配置します。
VIRTUAL HANDSを配置する Virtual HandsをドラッグアンドドロップでHierarchyに配置します。
ハンドでつかめるアイテムを配置する ハンドでつかめるアイテム、Grab InteractionをドラッグアンドドロップでHierarchyに配置します。 シーン上でCubeを、つかみやすい位置に移動させます。
QUEST LINKでPCに接続し実行 USBケーブル(Air Link)でパソコンにQuestを接続します。 UnityのPlayボタンを押下し実行します。ハンドトラッキングで手が表示され、Cubeオブジェクトが 手でつかむことが確認できます。
コントローラーを使う場合 コントローラに相当するController TrackingをドラッグアンドドロップでHierarchyに配置します。
3.BUILDING BLOCKでパススルーを設定する BUILDING BLOCKSを使う場合
CAMERA RIGを配置する 新しいシーンを作成し、Main Cameraを削除します。 頭の部分に相当するCamera RigをドラッグアンドドロップでHierarchyに配置します。
パススルーを使う PassthroughをドラッグアンドドロップでHierarchyに配置します。
パススルーをQUEST LINK経由で利用する場合 パソコンのMeta Quest Link(旧Oculusアプリ)の設定でQuest Link経由でのパススルーにチェックを いれる必要があります。
実行して確認する ビルドする場合は、QuestをUSBケーブルで接続しBuild And Runで実機で動作確認します。 Quest Linkを利用する場合は、USBでPCに接続(もしくはAir Link)しPlayを押下します。
4.ハンドとコントローラーをプレハブから組み立てる
CORE SDKのインストール インストールがまだの場合、Meta XR Core SDKを選択しInstallします。
ヘッドトラッキングの設定 新規にシーンを作成します。 PackagesのMeta XR Core SDKのPrefabsフォルダにある。OVRCameraRigを Hierarchy(Scene)上にドラッグアンドドロップします。これで基本の頭のトラッキングができます。 不要になったMain Cameraを削除します。
ヘッドトラッキングの設定 OVRCameraRigのOrigin TypeをFloor Levelにしておくと良いです。
TRACKING ORIGIN TYPEについて Tracking Origin Type 説明 Eye Level アプリ起動時のHMD(頭)の位置を原点(0,0,0)に設定します。目線を中心にコンテンツを構 築する際に使います。 Floor Level アプリ起動時のHMD(頭)位置のX,Z座標の真下の床を原点(0,0,0)に設定します。 床位置は、ガーディアン設定時の床位置となります。 カメラ位置が床からの頭の位置、すなわち目線の高さになるので自然です。 Stage Floor Levelと同様であるが、シーン上のOVRCameraRigの向きが正面(Z+方向)になり、リ センターが無効となります。 コンテンツの見せたい方向に、初期の視線を向けることができます。また、ヘッドセットを はずしてかぶり直したときにリセンターがかかりますが、リセンターをかけたくない場合に もこの設定が有効になります。
HMDを同じ高さに設置し、起動した際の Unity上でのカメラ位置の違い。 カメラ起動時に横を向いた場合のUnity上でのカメラ 向きの違い。 シーン上のOVR Camera Rigの向き Eye Level 横を向いて アプリを起動 Floor Level Floor Levelでは、Unity上の原点から 目線位置にカメラが移動していること がわかります。 Stage Floor Level Stageではアプリ起動時の向きに関係なく、シーン上の OVR Camera Rigの向きが初期の方向になります。
手とコントローラーのどれを使うか OVRManagerのHand Tracking Supportの設定で、手とコントローラーのどれを使うかを設定でき ます。
コントローラートラッキングの設定① PackagesのMeta XR Core SDKのPrefabsフォルダにある。OVRControllerPrefabを Hierarchy(Scene)上のLeftControllerAnchor(RightControllerAnchor)の下に、ドラッグアンドド ロップします。
コントローラートラッキングの設定② LeftControllerAnchor(RightControllerAnchor)の下のOVRControllerPrefabを選択し、 InspectorでControllerをLtouch(RTouch)に設定します。これで基本のコントローラーのトラッキン グができます。
ハンドトラッキングの設定① PackagesのMeta XR Core SDKのPrefabsフォルダにある。OVRHandPrefabを Hierarchy(Scene)上のLeftHandAnchor(RightHandAnchor)の下に、ドラッグアンドドロップし ます。
ハンドトラッキングの設定② RightHandAnchorの下のOVRHandPrefabを選択し、InspectorでHand Typeを右手に設定します。 (Skelton Type/ Mesh Typeは、自動で変更されます。) これで基本の手のトラッキングができます。 OpenXRハンドスケルトンの場合 OVRハンドスケルトンの場合
動作をEDITORで確認 Meta QuestをUSBケーブルで接続(AirLinkでも可)し、Quest Link起動。 Unity Editorで実行します。コントローラーをもって認識するか? するか確認します。 コントローラーを置いて手を認識
5.INTERACTION SDKを使う
INTERACTION SDKとは 手やコントローラーでより細かな操作を行うことができます。 ものをつかむ 遠くのものをつかむ ボタンを押す ものをつかんだ時の手の形をそれっぽく見せる 手のジャスチャーを認識させる シーン内を移動する etc.
INTERACTION SDKの使い方 1. Building Blocksを使う。 2. OVRCameraRigInteractionプレハブをベースに組み立てる。 次ページ以降に軽く、中身の解説を行っています。 3. その他の用意されているプレハブとコンポーネントをベースに組み立てる。 Interacgtion SDKを自分で組み立てる以降の章で解説を行っています。こちらを理解した上で Building Blocksや、 OVRCameraRigInteractionを使うというのが基本になるかと思います。
INTERACTION SDK のインストール インストールがまだの場合、 Meta XR Interaction SDKをインストールします。
OVR CAMERA RIG INTERACTIONの追加 新しいシーンを作成します。 Packages/Meta XR Interaction SDK/Runtime/Prefabsより、OVRCameraRigInteractionを追 加します。 不要となるMain Cameraを削除します。
OVR CAMERA RIG INTERACTIONの確認 OVRCamaraRigがあり、またInteraction SDKの機能が網羅的にセットされた構成となっています。 手とコントローラーの中身を見ていくと、つかんだり移動したりする機能が確認できます。 Poke Ray Grab Locomotion Distance Grab : 直接さわって操作 : Rayを飛ばして操作 : 直接つかむ : 移動用 : 遠くのものをつかむ
CONTROLLER INTERACTORSの設定の確認 ControllerInteractorsのInteractor Groupを確認します。Groupに配下にあるInteractorがセットさ せれているのが確認できます。使うInteractorを配下にセットし、その参照をGroupにセットするこ とでその機能が利用できるようになる仕組みです。
QUEST LINKでPCに接続し実行 USBケーブル(Air Link)でパソコンにQuestを接続します。 UnityのPlayボタンを押下し実行します。ハンドトラッキングで手が表示され、コントローラーを持つ とコントローラーが表示されます。移動に使うロコモーションのInteractorも含まれるため、移動や回 転の操作も可能です。(移動できる領域が未設定なので移動はできません。) このような感じで全部入りの手とコントローラーの設定済みのプレハブを簡単に利用できます。
必要な機能(INTERACTOR)の選択方法 コントローラーでつかみたい場合だとGrabInteractorだけを残し、他のInteractorを削除します。 GroupのElementから、削除したInteractorの参照を削除します。 Interactorの使い方は、次ページ以降個別に説明していますので、そちらを参考にしてください。
6.INTERACTION SDKを自分で組み立てる
OVR INTERACTIONを追加 OVR Interactionを自分で組み立てる場合、前セクションの「ハンドとコントローラーをプレハブから 組み立てる」の状態から作業を継続します。 Packages/Meta XR Interaction SDK/Runtime/Prefabsより、OVRInteraction追加します。
OVR INTERACTIONの設定 OVRInteractionのCameraRigにOVRCameraRigの参照を設定します。 OVRRigRefは自動でセットされます。
ハンドとコントローラーの追加 OVRInteractionの下に、PackagesよりOVRControllers、OVRHandsプレハブを追加します。
ハンドの表示をINTERACTION SDK側にまかせる Interaction側で手の表示を行う場合は、両方の手のOVRHnadPrefabの手の表示部分を削除します。 両手に 実施 削除
実行して確認する ビルドする場合は、QuestをUSBケーブルで接続しBuild And Runで実機で動作確認します。 Quest Linkを利用する場合は、USBでPCに接続(もしくはAir Link)しPlayを押下します。 コントローラーを使うと、コントローラーが表示されます。コントローラーを置いて、手をかざすとハ ンドトラッキングに切り替わり手が表示されます。
補足:手の表示をCORE SDK側にまかせる場合 Core SDKとInteraction SDK側両方で手が表示されているため、Interaction SDKの表示を消す場 合はHandVisualRight/Leftを非Activeにします。この場合「ハンドの表示をInteraction SDK側に まかせる」の作業は不要です。
7.ハンドとコントローラにつかむ設定を入れる
ものをつかむ つかむ側とつかまれる側に、必要なコンポーネントを追加して実現します。 つかまれる側 つかむ側 何でどのようにつかむか ハンド、コントローラー × Grab、Ray、Poke… + Interactor つかむ + Interactable Grabbable Transformer 何でどのようにつかまれるて、どの ように動かすか ハンド、コントローラー × Grab、Ray、Poke… × 平面上、軸、球
HANDS / CONTROLLER / CONTROLLER HANDS 3種のプレハブと、つかむ側・つかまれる側のコンポーネントを組み合わせ”つかみ”を実装します。 プレハブ名 OVRHands OVRControllers OVRControllerDrivenH ands つかむ側のコンポーネント つかまれれる側 のコンポーネント HandGrabInteractor HandGrabInteractable HandPokeInteractor PokeInteractable HandRayInteractor RayInteractable DistanceHandGrabInteractor HandGrabInteractable ControlleGrabInteractor GrabInteractable ControllerPokeInteractor PokeInteractable ControllerRayInteractor RayInteractable ControllerDistanceGrabInteractor GrabInteractable HandGrabInteractor HandGrabInteractable HandPokeInteractor PokeInteractable HandRayInteractor RayInteractable DistanceHandGrabInteractor HandGrabInteractable 入力 (手・コントローラー) 見え方
コントローラでつかむ① ControllerGrabInteractorを検索し、ControllerInteractorsの配下に追加します。
コントローラでつかむ② 両方の手のCotrollerInteractorsに、追加したInteractorの参照を設定します。 両手に 実施
ハンドでつかむ① HandGrabInteractorを検索し、HandInteractorsの配下に追加します。
ハンドでつかむ② 両方の手のHandInteractorsLeft(Right)に、追加したInteractorの参照を設定します。 両手に 実施
8.つかまれる側の設定
CUBEをつかめるように① Cubeを作成し、RigidBodyを追加します。つかみやすい位置においてください。CubeにはCollider がついていますが、独自のメッシュなどの場合は自分でColliderを追加します。 落ちないようにUse Gravity=True、Is Kinematic=Trueに設定します。
CUBEをつかめるように② Cubeに、InspectorのAdd Componentから、 GrabFreeTransformerとGrabbableコンポーネン トを追加します。 GrabbableコンポーネントにCubeにさきほどつけたGrabFreeTransformerを設定します。
CUBEをコントローラーでつかめるようにする Cubeに、Grab Interactableコンポーネントを 追加します。 Grab Interactableコンポーネントにつかみ位置 とRigidbodyが自動で設定されます。(設定され ていない場合は手動で設定します。)
CUBEをハンドでつかめるようにする Cubeに、Hand Grab Interactableコンポーネ ントを追加します。 Hand Grab Interactableコンポーネントにつか み位置とRigidbodyが自動で設定されます。(設 定されていない場合は手動で設定します。)
ハンドでもコントローラでも、コントローラーハンド(コントローラー使用で表示は手)でもつかめるよ うにするならば、Interactableを複数つければ良いです。
実行して確認する ビルドする場合は、QuestをUSBケーブルで接続しBuild And Runで実機で動作確認します。 Quest Linkを利用する場合は、USBでPCに接続(もしくはAir Link)しPlayを押下します。 手もしくはコントローラーでCubeがつかめるようになっています。
V65の変更点 One Grab Free TransformerとTwo Grab Free Transformerが、GrabFreeTransformerに統合 されています。使い方は2つのコンポーネントの代わりに、 GrabFreeTransformerを追加するだけ です。
その他のコンポーネント Grabbable 挙動 Grabbable Transformerと組み合わせてものをつかめるようになります。 Physics Grabbable(廃止予定) Grabbableに統合(V65~) Grabbableコンポーネントと併用し、物理挙動をもつものをつかめるようになり ます。Rigid Bodyは、Use Gravity=True Is Kinematic=Falseで使います。 Transformer 挙動 One Grab Free Transformer(廃止予定) Two Grab Free Transformer(廃止予定) GrabFreeTransformer (V65~) 片手持ち/両手持ち GrabFreeTransformerに統合されます。 One Grab Translate Transformer XYZの相対移動範囲を限定でき、平面上を動かしたりする場合に利用。 One Grab Physics Joint Transformer Configurable Jointを使用してターゲットを制御できる。 One Grab Rotate Transformer 回転軸を固定、回転のPivotと回転範囲を指定できる。 One Grab Sphere Transformer(V64~) 円弧上の移動範囲を指定できる。 Two Grab Plane Transformer Yの移動範囲を限定でき、平面上を動かしたりする場合に利用。 Two Grab Rotate Transformer 回転軸を固定、回転のPivotと回転範囲を指定できる。
PHYSICS GRABBABLEの例 右手から左手に渡せるようになっ たり、落下物を空中でつかむこと ができます。キャッチボールでき るということです。 ものを投げたい場合、 ThrowWhenUnselectedコン ポーネントを追加します。 ※V65以降で、Grabbableに統合 されます。 ※V66以降で、 ThrowWhenUnselectedが Grabbableをアタッチした際に 自動的に追加されます。
ONE GRAB TRANSLATE TRANSFORMERの例 移動可能範囲を設定する場合は、 Constrainにチェックをいれる。 XとZを-30cm~30cmしか移動 できないようにし、Yの移動制限 はなしの場合。
TWO GRAB FREE TRANSFORMERの例 両手で握って回転や拡大縮 小させる場合の例です。 拡大縮小に制限を設ける場 合は、 Constrainに値を設 定。
ONE GRAB SPHERE TRANSFORMERの例 Sphere Centerを中心に上 下30度の範囲に移動制限を 設ける例です。 中心からの距離による制限 はなさそうで、無限球の上 下角の移動制限をつけるこ とができます。 30度 -30度 Sphere Center 横からみた場合の移動可能範囲
TIPS:握られた、離されたタイミングのイベントをとる PointableUnityEventWrapperを追加して、Grabbableを参照として指定することでSelectと Unselectのタイミングをとることが可能です。 public class GrabEvent : MonoBehaviour { private bool isGrabbed = false; public void Select() { isGrabbed = true; } public void UnSelect() { isGrabbed = false; } }
TIPS:握られているかどうかを判定 自分が握られているかどうか、GrabInteractableのStateを参照することで判定することができます。
TIPS : 握っている物を強制的に手放す HandGrabInteractorのForceReleaseメソッドで強制手に手放すことが可能です。
TIPS:手のコライダー 手の指1本1本にコライダーを自動で付ける。Is Triggerがfalseのコライダーとなるので注意。
TIPS:ピンクのマテリアル Built-inシェーダーのマテリアルは、URPでは正常に表示されないためURP用に変換してください。 Meta XR SDKのマテリアルはPackage配下に格納されるため、Package配下のマテリアルを検索し てAssets側にコピーします。コピーしたマテリアルを選択してメニュー(Edit -> Rendering -> Convert …)から変換し、マテリアルをURP用のシェーダーに変換したマテリアルに置き換えます。
TIPS : 旧バージョンからのUNITY6への移行① 移行中のメッセージ このプロジェクトのソース・ファイルの中には、変更されたAPIを参照して いるものがある。これらは自動的に更新されます。更新する前にプロジェ クトのバックアップを取っておくことをお勧めします。これらのファイル を更新しますか? プロジェクトのマテリアルは、Universal Render Pipeline(URP)の古 いバージョンを使用して作成されています。Unityは、それらを現在のバー ジョンのURPと互換性があるようにアップグレードする必要があります。 Unityは、プロジェクト内のすべてのマテリアルを再インポートし、アップ グレードされたマテリアルをディスクに保存し、必要に応じてソース管理 でチェックアウトします。 詳細については、URPドキュメントのマテリア ルアップグレードガイドをご覧ください。
TIPS : 旧バージョンからのUNITY6への移行② TextMeshProはuGUIに組み込まれたため、重複した状態となったインストール済みのTMPのフォル ダを削除する。 Visual Studio Code Editorなど、Deprecatedのパッケージを削除
TIPS : 旧バージョンからのUNITY6への移行③ ビルド中のエラー、ビルド後にアプリが落ちるなどの場合。 Custom Main Manifestのチェックを外してビルドする。(外せない場合、Removeする)