Meta Quest 3で開発する、はじめの一歩

（2024/10/06 Unity6、Meta XR All in-one SDKを利用する手順に変更）
（2025/04/25 OpenXR Pluginを利用する手順に変更）

Meta Quest 3で、自分でUnityプロジェクトを新規作成し、
下の例の空が眺められるところまでいきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/c76c6fea-4620-d5b8-c966-99b9e6bbab83.jpeg" width=256 />

# 前提
- Windows11（基本Macでも同じです）
- Unity 6 Preview (6000.0.21fa)
- Meta XR All-in-One SDK 74.0.2
- OpenXR Plugin 1.14.3

### その他
- 以下がまだの人は [開発環境とヘッドセットのセットアップ](https://developer.oculus.com/documentation/unity/unity-env-device-setup/) から実施ください
    - Meta Quest 3 が開発者モードになっていること
    - Unityのインストール
    - adbコマンドが使える状態になっていること

# 過去のQuestでの開発との大きな違い
- 以前は Oculus Integration SDK をAssetStore経由でインポートしていたかと思いますが、現在は非推奨となっています。Asset自体はストアにあるのでダウンロードは可能です
- 以前はProject Settingsをポチポチ変更していましたが、今はその変更をサポートしてくれる仕組みが導入されています。

# 手順

## Unity

1. プロジェクトの作成
    1. 3D (Built-in Render Pipeline) を選択します。
    （Unity6で開始する場合、デフォルトだとテンプレートがダウンロードされていないと思うので、ダウンロードしてください。）
        ![2024-10-06_15h36_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/065e8c4b-0b0c-bf67-3b62-c84fcd908363.png)
2. ビルド設定
    1. File → Build Profiles
    2. Androidを選択して Switch Platform
3. Meta XR All-in-One SDKのインポート
    1. Unity Asset Store の [Meta XR All-in-One SDK](https://assetstore.unity.com/packages/tools/integration/meta-xr-all-in-one-sdk-269657) に移動します（一時的にブラウザでの作業になります）
    2. Add to My Assetsボタンを選択します
    3. ライセンス確認用のポップアップが表示されたらAcceptを押します
    4. Open in Unity を選択します
    5. Unity EditorでPackage Manager（①）のMy Assets（②）のMeta XR All in-one SDKが選択された状態で開くので、Installボタン（④）を押します
        ![2024-10-06_16h31_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/6064070d-8ec1-7eb8-ba35-7d3036484392.png)
    6. Restart Unityのダイアログが表示されるので、Restart Edtiorボタンを押してUnityEdtiorを再起動します
4. プロジェクトのMeta XRの設定変更
    1. MenuのMeta → Tools → Project Setup Tool を選択します。（Project Settings → Meta XRと同じ画面）
    2. Fix All を押す（Outstanding Issuesはバージョンなどによって異なると思います）        
        ![2024-10-06_22h13_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/2402bfb9-1e21-b81c-e441-78a7f878f295.png)
    3. Outstanding Issuesが以下二つが残っているのはそのままで大丈夫です。次の手順で解消します。
5. XR Plugin Managementのインストール
    1. Project Settings（①）を開き、XR Plugin Management（②）を選択して、Install XR Plugin Managementボタン（③）を押します
        ![2024-10-06_22h16_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/9ff95379-43c2-31ea-f3f0-69341605c721.png)
    2. Open XRにチェックを入れます
        ![2025-04-25_08h06_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/17986567-48fb-41fa-a8d4-319ad0b6d52b.png)
6. シーンの編集
    1. Main Cameraを削除
    2. Packages/Meta XR Core SDK/PrefabsからOVRCameraRigをドラッグアンドドロップ
7. ビルド
    1. File → Build Profilesを開きます
    2. Scene List（①）を選択して、Add Open Scenes（②）を押します
        ![2024-10-06_21h58_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/506075/c6eab773-8af6-4a71-ae26-968d85c05896.png)
    3. Androidを選択してBuildを押します
        1. 適当なフォルダに適当なファイル名でapkファイルを出力する
        2. Unsupported Input Handling..のポップアップが表示されたら、Yesを押します

## インストールと実行
1. インストール
    1. adb install ビルドした.apk
2. Quest3
    1. アプリライブラリを選択
    2. 検索ボックスの右側にあるドロップダウンから、提供元不明を選択
    3. インストールしたプロジェクトを選択して実行
        1. 実行したけど何も起こらない場合、裏でDeploymentOperationFailedExceptionが発生している可能性があります。Unityの手順4.bを実施しているか確認してください。
    4. 例の空が見えているはずです。

# エラー

# DeploymentOperationFailedException が出る

### 原因

Android の Manifest ファイルが複数存在すると起こりうるらしい。[参考](http://twinklesmile.blog42.fc2.com/blog-entry-259.html)。

### 対応方法

両方やる必要はありません。

- Project Settings → Player → Publish Settings → BuildのCustom Main Manifestのチェックを外す
- Tool → Oculus → Remove AnsroidManifest.xml と選択し

## TextMeshPro のエラーが出る

### エラー内容

```
Library\PackageCache\com.unity.textmeshpro@3.0.6\Scripts\Editor\TMP_PreBuildProcessor.cs(26,31): error CS1061: 'TMP_FontAsset' does not contain a definition for 'ClearFontAssetDataInternal' and no accessible extension method 'ClearFontAssetDataInternal' accepting a first argument of type 'TMP_FontAsset' could be found (are you missing a using directive or an assembly reference?)
```

### 原因

`com.meta.xr.sdk.all` をPackage Managerからインストール（install package by name）すると、`[com.meta.xr.sdk.interaction](https://developer.oculus.com/downloads/package/meta-xr-interaction-sdk/)` の依存関係にTextMeshPro 3.0.6が依存関係として入っているため、上記エラーが発生します。

### 対応方法

両方やる必要はありません。

- com.meta.xr.sdk.allをアンインストールして、必要なSDKのみをインストールする
    - 上記手順はこちらです
- Unityのバージョンを変更し、TextMeshProのバージョンを下げる（未検証）

# 参考

- https://developer.oculus.com/documentation/unity