OculusGoプロジェクトで最初にやること

OculusGoのプロジェクトを作成したときに、最初に毎回おこなう基本設定をまとめてみました。

開発環境を整える方法はこちらなどが参考になると思います。
https://qiita.com/culage/items/7be7b3e229fe41a6aaec

環境: Unity 2018.1.5f1 (64-bit) / OculusUtilities(1.26.0 2018/06/20)

# 設定すること

### ビルド設定で、ターゲットをアンドロイドにする

File→BuildSetting
　Androidに設定
　SwitchPlatformボタンを押す

### プロジェクトのパッケージ名などを設定

Edit→ProjectSettings→Player
　OtherSettings
　　PackageName: プロジェクト名　「username.test.proj_name」
　　※不明ソースの表示順に影響するので、書式を決めておくといい。
　　MinimumApiLevel: Android7.0 (Lv24)
　XR Setting
　　VirtualRealitySupotted:ON
　　VisualRealitySKDs:
　　　Oculusを追加

### Oculus Utilities for Unity をインポート

https://developer.oculus.com/downloads/package/oculus-utilities-for-unity-5/
からダウンロードしたユーティリティを、unityを起動中にダウンロードしたOculusUtilities.unitypackageをダブルクリックしてインポート。

以下チェックは外しても問題ない。
　　Oculsu/VR/Plugins
　　Plugins

### VR用カメラ追加

Hierarchyで以下操作を行う。

MainCameraを削除。
Prefabから、OVRCameraRigを追加。
OVRCameraRig.TrackingSpace.CenterEyeAnchorのCameraのClippingPlanes Nearを0.01に設定。(目の直前までポリゴンを透明化しない)
RightHandAncher、LeftHandAncherにTrackedRemoveを追加。
左手用のTrackedRemoveは、インスペクタかｒ「L_TrackedRemote」に設定を変更しておく。

### git用設定

#### テキスト形式で保存できるようにする

(これは最初からそうなっているので不要？)
Edit→ProjectSettings→Editor …… から右のInspectorで、
　VersionControl      / Mode: Visible Meta File
　Asset Serialization / Mode: Force Text

#### .gitignoreをプロジェクト直下に追加

unity用の.gitignore。(http://freesworder.net/unity-git/ を参考にさせてもらいました)

	/[Ll]ibrary/
	/[Tt]emp/
	/[Oo]bj/
	/[Bb]uild/
	/[Bb]uilds/
	/Assets/AssetStoreTools*
	
	# Visual Studio 2015 cache directory
	/.vs/
	
	# Autogenerated VS/MD/Consulo solution and project files
	ExportedObj/
	.consulo/
	*.csproj
	*.unityproj
	*.sln
	*.suo
	*.tmp
	*.user
	*.userprefs
	*.pidb
	*.booproj
	*.svd
	*.pdb
	
	# Unity3D generated meta files
	*.pidb.meta
	
	# Unity3D Generated File On Crash Reports
	sysinfo.txt
	
	# Builds
	*.apk
	*.unitypackage

#### git管理に追加する

```
$ git init
$ git add .
$ git ci -m 'initial import'
```

### OculusGoの初期設定

以下スクリプトを作成して適当なゲームオブジェクトへアタッチ。
これはデフォルト設定でも問題ないので、細かい設定が必要な場合のみでよい。

```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Startup : MonoBehaviour {

    private void Awake()
    {
        // 画面解像度 scale 1.0 == 1024x1024 ～ 1.25 == 1280x1280(物理的な解像度の限界) 0.5fなどもフレームレートを稼ぐのに有効。
        UnityEngine.XR.XRSettings.eyeTextureResolutionScale = 1.25f;
 
        // 外枠側のレンダリングを荒くすることで速度を稼ぐ。 Off/LMSLow/LMSMedium/LMSHigh　外側の解像度が減っていく
        OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.LMSHigh;
 
        // 72Hzモード（綺麗になるがフレームレート安定が犠牲になる）
        //OVRManager.display.displayFrequency = 72.0f;
        
        // CPU,GPUのパフォーマンスレベル。0～3の大きいほど放熱が高く高スペックな動作をする。既定値は2。
        //OVRManager.cpuLevel = 2;
        //OVRManager.gpuLevel = 2;

        // テクスチャ解像度 デフォルトは1.0 上げれば上げるほどVR内のジャギーが消えてなめらかに描画できる。(効果は絶大だが劇的に重くなる)
        //UnityEngine.XR.XRSettings.eyeTextureResolutionScale = 2.0f;

        // 画面端の方が赤っぽくなることへの補正を入れる (adb shell setprop debug.oculus.forceChroma 1 相当)
        //OVRPlugin.chromatic = true;

        // アンチエイリアシング。あまり実感できない
        // QualitySettings.antiAliasing = 4;

        // シングルパスステレオレンダリング (普通は右目用と左目用の2回レンダリングを行うところを、1シーンにそれを無理やり押し込める手法)
        // Edit > ProjectSettings > Player
        //   XRSettings > StereoRenderingMethod: MultiPass→SinglePass

        // ・OVRCameraRigのOVR ManagerにあるEnable Adaptive Resolutionをオフにする
        // GPUの使用率が高くなるとフレーム落ちしないように自動的に解像度を下げる機能
        // かなり効果があったとのこと
    }

}
```