Open8

【備忘録】MetaQuest × Unity によるVR開発手順【随時更新中】

tkytky

はじめに

UnityでVR開発を行っていくための共通設定などを備忘録として書いていきます。
ある程度出来てきたら記事の方に移していく予定です。
Unityの操作は割愛しています。

■ 環境

  • Windows10
  • Unity: 2022.3.42f1
  • MetaQuest2
  • Meta XR All-in-One SDK: 69.0.1
tkytky

初期設定

■ 使用テンプレート

  • Universal 3D

■ プロジェクト設定

1. Build Settings

  • プラットフォームを Android に切り替える

2. Package Manager

  • Meta XR All-in-One SDKをインストール&インポート

3. Project Settings

3-1. XR Plug-in Management

  • Android Settings タブ -> Plug-in Providers -> Oculus にチェック
  • Windows, Mac, Linux Settings タブ -> Plug-in Providers -> Oculus にチェック

3-2. Meta XR

  • Fix All でエラーや警告を解消

3-3. Player

  • CompanyName を設定
  • Other Settings -> Identification -> Override Default Package Name のチェックを外す
tkytky

Buillding Blocks 【開発用パッケージ】

ハンドトラッキングなどのXRの基本機能がパッケージングされており、ワンクリックで簡単に利用することができる優れもの。

■ 利用方法

  1. Unity Editorのタブで、Meta -> Tools -> Buillding Blocks
  2. 一覧から選択やドラッグ&ドロップでシーンに追加される
tkytky

Meta XR Interaction ​SDK 【開発用パッケージ】

オブジェクトを掴んだりボタンを押したり、XR開発のための基本的なインタラクション機能が簡単に構築できるUnity用のパッケージ。

■ 利用方法

  1. Unity Asset Store より インポート&インストール
  1. 使用したいPrefabなどをシーンに追加していき実装を行っていく

■ サンプル

パッケージにはサンプルシーンが入っており、インポートすることで構築方法などを参考にする

  1. Package Manager -> Meta XR Interaction ​SDK -> Sampleタブ -> Example Scenesをインポート
  2. 以下のプロジェクト内にサンプルシーンが入っているので、ダブルクリックorヒエラルキーにドラッグ&ドロップして開く
  • Assets -> Samples -> Meta XR Interaction ​SDK -> (バージョン) -> Example Scenes
tkytky

アプリ開発をするにあたり、テストやデバッグをする度に「ビルドとVRヘッドセットへのインストール」をしないといけませんが、これでは開発に時間がかかり効率が悪すぎます。

そこでQuest Linkを使います。
USBケーブル(Quest Link)またはWi-Fi(Air Link)を使用して、PCとMeta Quest(VRヘッドセット)を接続するための機能です。

この機能を使うことで、Unity EditorのPlayモードでプレビュー、テストができるようになります。

■ 利用条件

Quest Link の要件を満たすもの。

  • Windowsであること(Macは利用できません…)
  • USBケーブル(3.0 もしくは 2.0)
  • それなりのスペックのPC(ゲーミングPCとか)

■ 利用方法

  1. Unityの設定
    Project Settings -> XR Plug-in Management -> Windows, Mac, Linux Settings タブ -> Plug-in Providers -> Oculus にチェック
  2. VRヘッドセットをPCと接続
  3. Oculus Link を有効化
  4. Unity EditorでPlayボタンを押す
tkytky

Interactor と Interactable

インタラクションには、
インタラクションを実行する側 = Interactor
インタラクションを受ける側 = Interactable
が存在し、それぞれ実装していくことでインタラクションが実現できる。

Cubeを手で掴みたい場合は、
手 = Interactor
Cube = Interactable
ということになる。

tkytky

Interactor(インタラクター)の実装

インタラクションを『実行する側』。
ヒエラルキー内で名前にInteractorsと入っているオブジェクトの配下に、使用するインタラクションを登録していく。

例)

  • コントローラーのインタラクション -> ControllerInteractors
  • ハンドのインタラクション -> HandInteractorsLeft

■ 手順

※Meta XR Interaction ​SDK を例に書いてます。

  1. ヒエラルキー内で名前にInteractorsと入っているオブジェクトを探す
※ 例
OVRCameraRig/
└── OVRInteraction/
    ├── OVRControllers/
    │   ├── LeftController/
    │   │   └── ControllerInteractors          # これ(左手のコントローラ)
    │   └── RightController/                   # 右コントローラ(基本は左と同様)
    └── OVRHands/
        ├── LeftHand/
        │   └── HandInteractorsLeft            # これ(左手)
        └── RightHand/                         # 右手(基本は左と同様)
  1. 追加したいインタラクション(Prefab)をProjectから探して、Interactorsオブジェクトの子オブジェクトにする
  • インタラクション例
    • 掴む(Grab)
      • HandGrabInteractor: ハンド
      • ControllerGrabInteractor: コントローラ
    • 突く(Poke)
      • HandPokeInteractor: ハンド
      • ControllerPokeInteractor: コントローラ
    • レーザー(Ray)
      • HandRayInteractor: ハンド
      • ControllerRayInteractor: コントローラ
  1. InteractorsオブジェクトのコンポーネントBest Hover Interactor GroupのプロパティInteractorsに、追加したインタラクションをアタッチする
tkytky

Interactable (インタラクタブル)の実装

インタラクションを『受ける側』。
3DオブジェクトやUIなどのインタラクションを受けさせたいオブジェクトを作成していく。

ヒエラルキー構造(例)

OVRCameraRig/
└── …
Interactable/
└── Cube/                  # 例としてCube
    └── HandGrab/          # 例として「手で掴む」インタラクタブル

■ Cube を掴む

  1. CubeにRigidbodyコンポーネントを追加する
  2. CubeにGrabbableコンポーネントを追加し、プロパティRigidbodyに1.を割り当てる