MacとUnity Free版を使ってZenrinさんの秋葉原上空をQueryちゃんがOculus DK2で飛ぶ、方法


はじめに
=====

タイトル長い！要するにそういうことです。

割と簡単にできるわりに、やはり最初は躓く箇所も多いので共有します。

各Version
-----

* Mac: Mac mini Late 2012, 2.3GHz Core i7, 16GB Memory
	* OS X 10.9.4
* Unity 4.5.3f3 Free版
* Unity Assets
	* [Japan Otaku City](https://www.assetstore.unity3d.com/jp/#!/content/20359): draft(Aug 27, 2014)
	* [OVRAgent_0.4.1_20140823.zip](http://stereoarts.jp/)
* Oculus DK2
	* Runtime: oculus-runtime_rev_1_sdk_0.4.1_osx
	* SDK: ovr_sdk_macos_0.4.1

準備
====

以下の手順は省略します。

* Unity を Install
* Oculusの設定： [Macの人はこの方のブログが参考になります](http://takahi5.hatenablog.com/entry/2014/08/20/004818)
	* ファームウェアの更新も忘れずに
* UnityのAssetsを入手

Unityの下準備
=====
Project作成
-----------
`[File] -> [New Project] -> 適当なProject名` とします。

Japan Otaku CityをImport
--------
https://www.assetstore.unity3d.com/jp/#!/content/20359
から「Unityで開く」を選びます。
![Cursor_と_Asset_Store_-_Japanese_Otaku_City.png](https://qiita-image-store.s3.amazonaws.com/0/11124/f9348d1a-32c3-0879-1e2e-85d9252ae909.png "Cursor_と_Asset_Store_-_Japanese_Otaku_City.png")

しばらくすると、下記の画面が開くので import を選びます。

![Cursor.png](https://qiita-image-store.s3.amazonaws.com/0/11124/4be11310-e579-2e7d-8c5f-7b745de6fa49.png "Cursor.png")

しばらくすると下記の画面が開くので import を押します。

![Importing_package.png](https://qiita-image-store.s3.amazonaws.com/0/11124/623a870b-be16-7bf8-adc9-7a7567fb7e36.png "Importing_package.png")

コーヒーでも飲んで待ちます。しばらくして下記のようにAssetsに追加されていれば成功です。

![Untitled_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/efb50542-1faa-610d-aff7-c1b5c88df136.png "Untitled_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")


Sceneを作成
-----------

秋葉原のモデル自体は `005339_08932_25_14/Models/PQ_Remake_AKIHABARA` なんじゃないかと思いますが、手間を省くために同梱されているSceneを開いて編集していくことにします。

下記のように `Scenes/Sample_005...` をダブルクリックします。

![Untitled_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/5c5e13c8-c772-ba75-c562-0a5d8aaf1c44.png "Untitled_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

とりあえず実行してみると、下記のような画面になります。右上のMENUボタンから色々遊べます。これはこれだけでも楽しいです。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/7e679e03-56c2-80f8-ac06-c86d67e47505.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

Demoをちょっと編集
------

このDemoではMenuから色々なのが見られるのですが、いきなり`FlyThrough Mode`から始まって欲しいので変更します。
下記のように`Controller` Objectの`ZRNGUIController`をダブルクリックしてMonoを起動します。

![Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/6f69f19e-1ee8-2ed6-0223-0eb20c892531.png "Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")


changePlayMode, SetQueryChan を 1 で呼び出すようにします。これでいきなりFlyThroughモードで始まります。

```csharp:ZRNGUIController.cs
	// Use this for initialization
	void Start () {

		this.GetComponent<CameraController>().ChangeCamera(0);
		operateCameraNumber = 0;
		previousCameraNumber = 0;

		this.GetComponent<AmbientController>().changeShadow(true);
		shadowOn = true;

		changePlayMode(1); // ここを 0 -> 1 に変える
		SetQueryChan(1);   // ここを 0 -> 1 に変える
	}
```

### 余談なTips

初期設定のままでこのFlyThroughで遊ぶと、私のMac MiniだとFPSが20くらいで少しカクカクします。
ちょっとした対処法として、`Main_Camera_akihabara` の `Clipping Planes/Far` を 1000 → 20 くらいに変更すると FPSが50くらいになってだいぶ快適になります。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/8b1139a5-0dec-1117-28cb-0975551fc353.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

Oculus DK2の投入
======

OculusUnityIntegrationOVRAgent.unitypackage の Import
--------------

DLしてきた OVRAgent_0.4.1_20140823.zip を解凍して、その中の `OculusUnityIntegrationOVRAgent.unitypackage` をダブルクリックします。また Import画面が表示されるのでImportボタンをおします。下記のようにAssetsに追加されていればOKです。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/3883cc56-02cb-4918-8f92-f8c552fd92af.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

OVRCameraControllerの設定
------------

`Assets/OVR/Prefabs` から `OVRCameraController` を 下記のようにドラッグ&ドロップします。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/e6f3c899-646c-3b7e-dd1d-913366111fac.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

### Far Clip Plane
このままだとFPSが10を切るので、OVRCameraControllerのPropertyで `Far Clip Plane` を 1000 → 20 くらいに減らします。こうすると一応20ちょいくらいFPSが出ます。

### Follow Orientation

また、基本的にQueryちゃんを追跡したいので、 `Follow Orientation` を `Query-Chan` になるようにします。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone_と_Assembly-CSharp_-_ZRNAssets_005339_08932_25_14_Scripts_ZRNGUIController_cs_-_MonoDevelop-Unity.png](https://qiita-image-store.s3.amazonaws.com/0/11124/e2b693a0-6569-cf22-0d9a-019ba140b131.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone_と_Assembly-CSharp_-_ZRNAssets_005339_08932_25_14_Scripts_ZRNGUIController_cs_-_MonoDevelop-Unity.png")

Main Cameraの変更
--------

`Controller` の `Camera Object` を ｀OVRCameraController` に変更します。

![Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/0749decd-ca5a-14c0-3feb-a6bdf90360fc.png "Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

以前のMain Cameraは無効にする
------------

Main_Camera_akihabaraはもう不要なので、チェックを外しておきます。少しFPSが上がる...気がします。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/748d7f37-d6b3-ee06-249c-b4a5a836d58c.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")


実行してみる
--------
下記のような感じになっていればOKです。

![Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/22213567-acf3-a8de-4c18-96ae3adadf72.png "Cursor_と_Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")


DK2を動かすと、Queryちゃんを基準として色々な方向が見られるようになっているはずです。

Oculusで見るときのTips
======

接続できているか確認する
----------
`OculusConfigUtil`を開いて接続されているか確認します（念のため）。
実はセンサーが接続されてなくて画面だけ繋がっていて、全然DK2の方向を認識しないなー、と思っていたら接続できていなかった、ということがありました。

画面は「ミラーリング」がオススメかな?
----------

MacだとDirectなんとか、というのが対応していないらしいので、普通にPC画面に写してDK2で見る感じになります。
WindowがDK2側に行ってしまうと操作しづらいので、ミラーリングが良いと思うのですが、
その時、 **「解像度の設定」で「Rift DK2」** を選択しないと酷いことになります（数時間これに気が付かなくて、すごいずれた像を見ていた私…）。

![Cursor_と_DELL_U2410_と_Rift_DK2_と_MacとUnity_Free版を使ってZenrinさんの秋葉原上空をQueryちゃんがOculus_DK2で飛ぶ、方法.png](https://qiita-image-store.s3.amazonaws.com/0/11124/5b7fcc57-19bd-e09c-d573-96fa5115fe84.png "Cursor_と_DELL_U2410_と_Rift_DK2_と_MacとUnity_Free版を使ってZenrinさんの秋葉原上空をQueryちゃんがOculus_DK2で飛ぶ、方法.png")

開発中はUnityを全画面表示にして、Maximize on Playにしておく
----

開発中は Unityを全画面表示にして、 `Maximize on Play`にしておくとDK2での表示テストが簡単かなと思います。

![Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png](https://qiita-image-store.s3.amazonaws.com/0/11124/6beea437-d27f-880f-af36-90ef7d17ca26.png "Sample_005339_08932_25_14_unity_-_unity-dk2-2_-_PC__Mac___Linux_Standalone.png")

全画面表示でしばらくすると方向のトラッキングが効かなくなったとき
------
マウスを画面一番上まで持っていって、MacのMenuを出すと何故か復活します。何故だ。。。

Queryちゃん要らないんだけど…
-------

Main Cameraを無効にしたように、`Query-Chan` のチェックを外すと表示されなくなります。
完全に飛行モードですね。
ただ、UIが向いている方向と進む方向が全然違うのでかなり違和感あります。
まあ、ちょいちょいいじれば快適になるでしょう。

OculusConfigUtil で Oculusが認識されない
-----------

物理的な配線がOKなのに認識されないことがあります。私は再起動したら認識されなくなりました。
私の場合は **`OVRAgent` というProcessが起動していなかった** のが問題でした。

この場合 Oculus RuntimeをInstallしたときにできる`Application/Oculus/Angent/ovragent` を実行したら起動するようになりました。その隣にある `installAgent.sh` を実行すると次回起動時に自動的に `ovragent`が起動するようになります。
＃ RuntimeをInstallしたときに普通は実行されるような気もしますが、、、どうなのかな。

さいごに
=====

Unity Pro版だとパフォーマンスが良いという話もあるので試したいですね。
まあ、Mac Miniだとそもそもこんなものかもしれませんが。

何はともあれ、こういうのを手軽に試せるようになっているってのはなんとも凄いことですね！
各種リソースを公開して頂いている人・団体に感謝です。