はじめてのOculus Quest 開発 with Unity

# はじめに
Oculus Questも買ったことだしいっちょVR開発してみようと意気込んだはいいものの、調べても「**前にOculus Goで開発したよね！！ここは共通だから省略するね！！！**」という記事が多い…。Goで開発してなかった自分にとっては色々とややこしかったので、ビルドまでの一連の流れを省略せずにまとめることにしました。

## 使用環境
- Oculus Quest 64GB
- Macbook Pro (2017) 10.14.3
- Unity 2019.1.2f1
- Oculus Integration 1.37
- SideQuest 0.2.0

## Oculus Questを開発者モードにする
- スマホのOculusアプリから、設定→Oculus Quest→その他の設定→開発者モードをオンにする
	- 開発者登録をしていない場合、[ここ](https://dashboard.oculus.com/)から団体を登録する
- USB-CケーブルでOculus QuestとPCを接続
- Questを被ると許可ウィンドウが出るので許可する

## JDK, SDKのインストール
- Unity2019以降であれば、Unity Hubの Add Modules → Android Build Support → Android SDK & NDK Toolsをインストールすれば全てやってくれるらしい
	- そうでない場合、[こちら](http://cycling.hateblo.jp/entry/2018/05/13/183657)などを参考にインストールする
<img width="958" alt="Screen Shot 2019-06-05 at 15.21.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/dd0195cb-12c4-d842-4221-bcbb4a9bc036.png">
<img width="959" alt="02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/1a3fc721-c545-8c79-8bff-ce363304cee3.png">

## Unity側の設定
- [Oculus Integration](https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022)をAsset Storeからダウンロードし、インポートする
- File -> Build Settings からAndroidにSwitch Platformする
	- Android Build Supportが入っていない場合、インストールする
- Player Settings -> XR Settingsから`Virtual Reality Supported` にチェック
	- `Virtual Reality SDKs`にOculusがない場合+から選択する
<img width="502" alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/33a34362-cda9-e319-b818-399ebc24349c.png">
<img width="502" alt="2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/c96476c1-5844-0cc7-f3a7-65079d3c86f0.png">

- Other Settings (XR Settingsの2つ上)
	- `Package Name`を適当な名前にする
	- `Minimum API Level`を`Android 4.4 'KitKat'`にする
<img width="477" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/92e29474-77d5-4c7f-a5fb-7169a7e74f71.png">

- Asset/Oculus/VR/Prefabsの中にあるOVRCameraRigをHierarchyに追加
	- Main Cameraは消しておく

<img width="231" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/d18ff673-4cd8-69b9-3045-99fed5046980.png">

- OVRCameraRigのInspector -> OVR ManagerのTarget DevicesのElementを`Quest`にする
	- 出てこない場合、Unityを再起動したら出てくる(力技)

<img width="319" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/0d9f217c-267a-f518-881c-89e0ad6656a4.png">

## コントローラの表示 (Optional)
- Asset/Oculus/VR/Prefabsの中にあるOVRControllerPrefabを下図のように `LeftControllerAnchor`と`RightControllerAnchor` の下に配置
- Leftの方のOVRControllerPrefab -> OVR Controller Helper -> Controllerを`L Tracked Remote`にする

<img width="234" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/c39267b6-d59b-3ed8-a390-b90feffffa43.png">
<img width="786" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/d4cd3d20-86b5-7791-f120-fbb59912e48e.png">

## ビルド
- File -> Build Settingsから**Build**する
- `Build Successful`と表示されたら、プロジェクト直下に**APK**が生成されている。

### ハマったところ
```
Feature `out variable declaration' cannot be used because it is not part of the C# 4.0 language specification
```
TextMeshProが悪さをしているらしい。AssetとPackage両方に入っているので**Asset側**のを消す。

```
Found plugins with same names, Assets/Oculus/VR/Plugins/1.37.0/AndroidUniversal/OVRPlugin.aar and Assets/Oculus/VR/Plugins/1.37.0/Android/OVRPlugin.aar. Delete the one of the duplicate plugins.
```
```
Found plugins with same names, Assets/Oculus/VR/Plugins/1.37.0/Win64/OVRPlugin.dll and Assets/Oculus/VR/Plugins/1.37.0/Win/OVRPlugin.dll. Delete the one of the duplicate plugins.
```
プラグインが2つあってビルド出来ない。それぞれ`Android`と`Win`を消したらビルド出来たが、正しい対処法なのかは不明。
## SideQuestでapkをインストール
- **ADB install**などでやる方法もありますが、SideQuestを使うとめちゃめちゃ楽だったのでこちらを紹介します。
- [リリースページ](https://github.com/the-expanse/SideQuest/releases)から`SideQuest-(OS_Name)-x64.tar.gz`をダウンロードする
- 展開しSideQuestを起動する
- Oculus Questをケーブルで接続しておく
	- `Connected`となっていればOK
<img width="1132" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/9dcd5cda-61cc-eb07-3422-a205f2e513ca.png">

- 先ほど生成したAPKをウィンドウにドラッグ&ドロップする
<img width="1279" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/3c24cae8-12fb-a598-82e3-c4ffe1840a19.png">

- `Installed APK File xxx.apk`が出たら、もうインストール出来ている
<img width="1144" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/0a1f04a3-2b02-f1e3-8f25-d0f4e5477aac.png">

## Oculus Questから起動
- ライブラリ→提供元不明のアプリから起動する **お疲れ様でした！**
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211526/02c762d8-932a-d62e-8b91-e1a718b75458.jpeg)

## 参考にしたサイト
- [Unity「Library/PackageCache～」でエラーが発生。簡単1発解決だった。 - lisz-works](https://www.lisz-works.com/entry/unity-library-packagecache-error)
- [【unity】Unity5.5から2018.2にあげたらTextMeshProがめっちゃエラーした - naichi's lab](https://blog.naichilab.com/entry/replace-tmpro)
- [Oculus Quest向けのビルドとコントローラの表示メモ - JackMasaki’s blog](http://jackmasaki.hatenablog.com/entry/2019/05/05/134811)
- [Oculus Quest向けアプリの個人開発は可能か？ 実機で確かめてみた | MoguraVR News - VRの「いま」を掘りだすニュースメディア](https://www.moguravr.com/oculus-quest-personal-develop-try/)
- [Oculus Goで野良アプリを1からインストールするまでの手順|アンチソーシャル日記](https://anti-social-diary.blogspot.com/2018/06/oculus-go-non-store-apk.html)
- [【VR】Oculus Quest＋Unity開発 - ロードバイク時々ものづくり](http://cycling.hateblo.jp/entry/2019/05/25/120551)
- [Oculus Quest に Unity で開発したアプリをいれる方法（Mac/Win） - Qiita](https://qiita.com/Tomoyuki_Mikami/items/be9b3bf605a5d953be1b)
- [SideQuestを使ってOculus Questに非公式アプリ（apk）を楽々インストール | VRまにあっくす！](https://vr-maniacs.com/entry/sidequest/)
- [【VR】MirageSolo＋Unity開発 - ロードバイク時々ものづくり](http://cycling.hateblo.jp/entry/2018/05/13/183657)