ぷらこあ

ゆるふわゲームクリエイター / イベントオーガナイザーを目指してます

Unity4でOculusRiftチュートリアルみたいな勉強会

に参加した。

Unity×Oculus開発の一歩

このの勉強会に参加して Unity × Oculus のチュートリアルをしてきた。 紹介されたチュートリアル記事はこちら。

2014/09/03投稿で若干情報が古い部分があるので少し補完しつつ作業内容のメモ。 (TODO:画像載せる)

Oculusの下準備

以下のサイトから現時点で最新の0.4.4-betaなバージョンをDLした。
ちなみに 0.4.2 以前はUnityProにしか対応していなかったが 0.4.3 以降はFree版のUnityでも使用出来る。
(Unityのバージョンは 4.6.0 で試している)

自分の開発環境はmacだったので、以下の2点をDLした。

  • Oculus Runtime for OS X
    • Oculusの接続を認識するためのドライバ
    • DLしたら開いてマウントしておく
  • Unity 4 Integration
    • Unity用の開発パッケージ

Unity上での作業

Oculusパッケージのインポート

Unity 4 Integrationの解凍後のファイル群から 「OculusUnityIntegration.unitypackage」を選択すると Unity上で開発する上で最低限のパッケージをプロジェクトにインポートすることが出来る。

「OculusUnityIntegrationTuscanyDemo.unitypackage」は 文字通りDEMOのシーンが含まれるので特に見る必要が無ければインポートする必要は無い。

インポート後、「OVR」というフォルダが含まれていることを確認する。

必要な3Dモデル/アセットのインポート

今回はチュートリアル通り、ゼンリン社の提供する「Japan Otaku City」を使用する。 コレは秋葉原の街を再現した3DモデルをUnity上で扱いやすくしたアセットで 天候を操作したり、株式会社ポケット・クエリーズのキャラであるクエリちゃんを飛ばしたり出来る。

アセットストアからDLした上でインポートする。 「ZRNAssets/005339_08932_25_14/Scenes/Sample_005339_08932_25_14」 上記がサンプルシーンなので、コレを開く。

実行すると街がGameビューに表示される。右上のメニューから 「PlayMode:FlyThrough」を選ぶとキーボードを使用して自由にクエリちゃんを飛ばせるし 他にも天候を操作したり、カメラ位置をすることもできる。

Oculusでアキバの街を見る

「OVR/Prefabs/OVRCameraRig」を使用する。
Sceneビューの任意の位置にドラッグ&ドロップ
(もしくはHierarchyビューに配置後にTransform.Positionいじる)で
Oculus用のカメラを配置するだけで基本的にはOK。

(Oculus用のカメラがMainCameraより優先される仕組みはまだ追えてない… Camera.Depth変えたけどMainCameraが前に来ることはなかった)

MainCameraとして指定されている「Main Camera_akihabara」は 不必要なので削除/deactiveにしてしまってもよいが 「Controller」オブジェクト内の「CameraController」および「AmbientController」で指定されているので「Controller」自身を削除/Deactiveしてしまって良さそう。

もしくは「Main Camera_akihabara」が指定されている箇所を「OVRCameraRig」に置き換える。 (この場合、ZRNGUIController内でカメラ位置の移動が入るので注意)

アキバの街をOculus経由で散策する

「OVR/Prefabs/OVRPlayerController」を使用する。
上記と同じやり方で任意の位置に配置してあげればOK。
キーボードの矢印とかで移動出来る。
(OVRPlayerControllerスクリプトでCharactorControllerを依存コンポーネント指定してる / 地面と設置していないと落ちるので注意)

Oculusの視界を空飛ぶクエリちゃんに追従させる

「OVR/Prefabs/OVRCameraRig」を「Query-Chan_FlyThrough」の子オブジェクトに指定してあげればOK。
主観的な感じにしたければそのままで、クエリちゃんの後をストーキングしたければ「OVRCameraRig」の座標を調整する。
(0.0, 1.0, -1.5)くらいにしてあげるとちょうど良い感じ。

FPSが出ない…

実行中にスペースキーを押すと、FPS等のステータスが確認出来る。
(OVRMainMenuスクリプトにて処理が走ってるので「OVRCameraRig」を使ってる場合はAddComponentしてあげると良い)

自分のMBAだとUnity上の実行で 10 も行かなかった。とても悲しい。
ちょっとだけマシにするために、描画範囲を狭めてあげる。
「OVRCameraRig」配下の「LeftEyeAnchor/RightEyeAnchor」の ClippingPlanes.Far を10-30くらいに調整する。
遠くが描画されなくなるが、FPSは 20 ちょっとまで回復した。まだ悲しい。

実際に動かすときに 60-75 はないとVR酔いが激しくなるとのこと。

[20150226_追記]

OVRManager には Native Texture Scale という
レンダリングテクスチャのサイズを設定出来るプロパティがあり
defaultで設定されている1から下げることで
表示品質は下がるが、描画する内容は変えずパフォーマンス出来るという
アドバイスを頂きました。ありがとうございます!!

今後は…

CandyRockStarをOculusで見るのも手軽で楽しいだろうし

こういうマインクラフトっぽいゲームを作って入り込むのも楽しそう。

http://unity-atelier.hatenablog.com/entry/2015/02/25/051435