Unity初心者なプログラマがVR開発を始めるまで

# 前置き

* プログラムは書いたことがある人間がUnityでVR開発の環境構築をした時のメモです。
* ここに書いてある内容を終わらせるのに2-3日くらいかかりましたが、そんなに難しくない印象です。
* ここではひとまずOculus Goについて書いていますが、他のヘッドセットでも開発することがあれば随時追記していきます。

# やったこと(時系列)

## Unity開発の準備をする

* ライセンスの取得 & Unityアカウントの作成
  * [今日からはじめるUnity](https://qiita.com/nmxi/items/7950fb12ef925efa276d#%E2%85%B1unity%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
* [こちら](https://unity3d.com/get-unity/download) からPCにUnityをダウンロード&インストール

## Unityで非VR開発してみる

* [Roll a ballチュートリアル](https://unity3d.com/jp/learn/tutorials/s/roll-ball-tutorial)から一通りの開発を学ぶ
  * できるようになること
      * Unityの各ビューの把握
      * 簡単なシーン、オブジェクト（物体）、スクリプトの作り方
      * オブジェクトを動かしたり、衝突を判定したりできる
  * その他参考にしたもの
      * [シーンビューの操作](https://docs.unity3d.com/ja/current/Manual/SceneViewNavigation.html) (週末またぐと忘れてしまう・・)
      * [Unityにおける衝突判定まとめ](https://qiita.com/nutti/items/1a284c4bf8c79386aca7)
* [Creating a Quad](https://docs.unity3d.com/Manual/Example-CreatingaBillboardPlane.html)を読んでスクリプトからメッシュを作ってみる
  * できるようになること
      * 四角形(三角形のメッシュ x 2)のオブジェクトをシーンに配置できる
  * 悩んで自力解決したところ
      * どの記事もいきなりスクリプトから始まっているので、そのスクリプトをどうやってシーンと関連づけるのかわからなかった
      * →適当な空のゲームオブジェクトを作って、スクリプトを追加したらうまく動いた
  * その他参考にしたもの
      * [How to create a Mesh from code | Unity Tutorial - YouTube](https://www.youtube.com/watch?v=gmuHI_wsOgI)
      * [Mesh Filter vs Mesh Renderer](https://medium.com/@davidbeloosesky/mesh-filter-vs-mesh-renderer-8f4db9e2f966)

## Unity x VR開発の準備をする

### VR開発向け一般

* Unityの[VR overview](https://docs.unity3d.com/Manual/VROverview.html)を読んで必要なインストール&設定をする
  * FreeまたはProで5.1以上のUnityにはVR開発に必要なモジュール等がすでにビルトインされているようで、プロジェクトごとに“Virtual Reality Supported” チェックボックスを有効にすればOK

### Oculus Go

* 参考
  * [Oculus Unity Getting Started Guide](https://developer.oculus.com/documentation/unity/latest/concepts/book-unity-gsg/)
  * [unityでOculus Go向けアプリのビルド方法](http://rikoubou.hatenablog.com/entry/2018/06/03/002739)
  * [How To Build an App for the Oculus Go From Start To Finish (with Unity)](https://medium.com/inborn-experience/how-to-build-an-app-for-the-oculus-go-from-start-to-finish-with-unity-cb72d931ddae)
* Oculus Goに開発者アプリをインストールできるように設定する
* UnityでAndroidビルドができるようにする (以下は概要)
  * Java, Android SDKをローカルにインストール
      * abdを使いたかったので、Android Studio経由でAndroid SDKをインストールしました 
  * UnityにJava, Android SDKのパスを通す
      * 私のUnityにはAndroidの設定が足りてなかったので(おそらく初回インストール時のオプション?)、External ToolsにAndroidの設定項目が表示されず、後述のビルド設定も以下のようになっていました
      <img width="633" alt="Screen Shot 2018-10-11 at 11.39.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/140270/207475e1-52d9-5a9a-607a-95a9755b791d.png">
      * 画像の中の"Open Download Page"を押して、UnitySetup-Android-Support-for-Editor-xxx.pkgというものをダウンロード&インストールして、解決しました
* adbコマンドを使えるようにする
  * Android Studioをインストールしていれば、ADBも一緒にインストールされているはずなので、[Add Android ADB path Mac OS X Yosemite](http://codexpi.com/add-android-adb-path-mac-os-x-yosemite/)に従って、PATHを通す
  * ターミナルで `adb` を実行して、help的な内容が出てきたらOK
* アセットストアにある[Oculus Integration](https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022)も入れておくと便利そう
   * アセットストアのアセットを使うには、①アセットストアで購入 ②Unityアプリ内でダウンロード ③プロジェクトにインポート する必要がある

## UnityでVRプロジェクトの作成 & ビルドしてみる

* プロジェクトを作成
* プロジェクトの設定を行う
    * [VR overview](https://docs.unity3d.com/Manual/VROverview.html)を参考に“Virtual Reality Supported” チェックボックスを有効にする
    * [unityでOculus Go向けアプリのビルド方法](http://rikoubou.hatenablog.com/entry/2018/06/03/002739)を参考にパッケージ名などを設定する
* アプリを作る！！！ (ここは後日別の記事で)
* あとはヘッドセット独自のビルド方法に従う

### Oculus Go
* ビルド設定でAndroidを選択。Switch Platform、Buildを順に押す。→apkファイルが出来上がる
* PCと電源のついたGoをUSBケーブルで接続
* [How sideload an app to Oculus Go without Oculus Store](https://headjack.io/tutorial/sideload-install-app-apk-oculus-go/)を参考に、接続中機器を確認して、先ほど作成したapkファイルをインストールする
  * コマンドの詳細は[よく使うadbのコマンド](https://qiita.com/t2low/items/cb37cec5f864c4748e14)を参考