ゼロから始めるVR開発 ~実機でのテストまで~

## はじめに
開発したことのない、Unity自体使ったことのない知識ゼロの私がVRアプリを開発する記録。
やっていて少しでも引っかかったところがあれば記載していきます。
自分がやったことの見直しのための記事ですが、何もわからない状態の人が参考になれば幸いです。

## 開発環境
- Unity Hub 2.2.2
- Unity 2019.2.1f1
- Oculus Quest 64GB
- MacBook Pro(2017) 10.14.6

## Unityのインストール
UnityHubを使うとUnityのバージョン管理ができるらしい。
とりあえずUnityの最新版をインストールした。

## OculusUnityのスタートガイド
スタートガイド
https://developer.oculus.com/documentation/unity/book-unity-gsg/

まずは何をどうすればいいのかわからない状態だったので、とりあえずチュートリアルを何も考えず手順通りこなす。
私はOculusQuestのため、OVRManagerのインスタンスを変更した。
OVRManagerはOVRCameraRigインスタンスにアタッチされているのでTarget DevicesをQuestに変更する。

## チュートリアルをこなす
[Oculus Unityスタートガイド](https://developer.oculus.com/documentation/unity/unity-tutorial/)

プレイヤーへのコントロールスクリプトの追加の際にPlayerControllerの名前についたファイルが存在しているため別の名前をつけた。
スクリプトの速度の設定を忘れないようにする。

Playをすると以下のエラーが出た。
`NullReferenceException: Object reference not set to an instance of an object
OculusSampleFrameworkUtil.HandlePlayModeState (UnityEditor.PlayModeStateChange state) (at Assets/Oculus/SampleFramework/Editor/OculusSampleFrameworkUtil.cs:43)
UnityEditor.EditorApplication.Internal_PlayModeStateChanged (UnityEditor.PlayModeStateChange state) (at /Users/builduser/buildslave/unity/build/Editor/Mono/EditorApplication.cs:415)`

https://forums.oculusvr.com/developer/discussion/77966/nullreferenceexception-from-oculus-package

以下のサイトで見る限りは対処法は不明。問題の行のをコメントアウトしてひとまず誤魔化す。
一通りやってはみたものの作ったアプリをOculusに持って行って動かす方法は書いていなかったため対処方法を探す。

## 開発モードをオンに
Oculusの初期設定の際にスマホにインストールしたOculusアプリから設定->OculusQuest->その他設定->開発者モードをオンに
初めての場合開発者登録が必要のため登録する。
充電に使うUSB-CケーブルでPCと接続すると許可ウィンドウがQuest側で出るので許可する。

## JDK・SDKのインストール
OculusQuestはAndroidベースなのでJDK・SDKをインストールする。
<img width="979" alt="スクリーンショット 2020-02-15 13.21.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586305/4a849263-43f2-af38-3ad8-0936e6f0d6ed.png">

## ビルドする
ビルドして続行してみたところ4つのエラーが出た。

`BuildFailedException: The Vulkan Graphics API does not support XR in your configuration. To use Vulkan, you must use Unity 2019.3 or newer, and the XR Plugin Management.
OVRGradleGeneration.OnPreprocessBuild (UnityEditor.Build.Reporting.BuildReport report) (at Assets/Oculus/VR/Editor/OVRGradleGeneration.cs:104)
UnityEditor.Build.BuildPipelineInterfaces+<>c__DisplayClass15_0.<OnBuildPreProcess>b__1 (UnityEditor.Build.IPreprocessBuildWithReport bpp) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:411)
UnityEditor.Build.BuildPipelineInterfaces.InvokeCallbackInterfacesPair[T1,T2] (System.Collections.Generic.List`1[T] oneInterfaces, System.Action`1[T] invocationOne, System.Collections.Generic.List`1[T] twoInterfaces, System.Action`1[T] invocationTwo, System.Boolean exitOnFailure) (at /Users/builduser/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildPipelineInterfaces.cs:391)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:187)
`
Vulkan Graphics APIは使えないようなのでOPenGLES3の優先度を上げれば消える。
Build Settingsのプレイヤー設定のその他設定から変更できる。

`UnityException: No Android devices connected
Make sure your device is plugged in.
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr) (at /Users/builduser/buildslave/unity/build/Modules/IMGUI/GUIUtility.cs:187)
`
アンドロイドの端末が接続できてねーぞ、とのこと。
開発者モードがオンになっているのを確認した上でもう一度USBデバッグの許可をしたら消えた。

残り二つは上記２つのエラーを直したら消えたので省略。

## 動かしてみた
![com.hakoniwaoden.VRSample-20200215-163059.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586305/39e04720-eaa2-cc95-d35b-e19683c91a61.jpeg)
ひとまずチュートリアルのプロジェクトを実機にて動作確認することができた。

![com.oculus.vrshell-20200215-163023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586305/3728087d-bd48-84b4-d793-ac4cb43a4340.jpeg)
ビルドしたアプリはOculusのナビゲーション->ライブラリ->提供元不明のアプリから選択することで動作するようになった。

## その他参考になった記事
[Oculus Quest に Unity で開発したアプリをいれる方法（Mac/Win）](https://qiita.com/Tomoyuki_Mikami/items/be9b3bf605a5d953be1b)

[はじめてのOculus Quest 開発 with Unity](https://qiita.com/Ichitar0/items/42efd6d153bbd175de1c)

## 最後に
次はユニティちゃんを動かしてみたい。