はじめに
OculusRift体験会で「自分の体がないのが不思議!」と感想をもらうほど素晴らしいコンテンツを作った、展示した一方で、『せやな』と歯がゆい思いをしたことある方におすすめ。
今回は、Oculus SDK 0.5に対応した「OculusRiftで自分の体を表示する方法」をまとめます。
使うアセットはUnityで動的にモーションを生成するFinalIKに、同提供のOVRアドオンを使用します。
Oculus Rift DK2のヘッドトラッキング、ポジショントラッキングで自分の体に見立てたキャラクターの姿勢をアニメーション。自分の体っぽく再現してみます。
目次
環境
- Unity 5.0.0p3
- Oculus Runtime for Windows 0.5.0.1-beta
- Unity 4 Integration 0.5.0.1-beta(いわゆるOculusSDK)
- Final IK beta0.5
- Final IK OVR add-on Unity 5(20150319、ファイルサイズ3,057,391Byte)
手順
アセットの準備
1. Unity 4 Integration 0.5.0.1-betaのインポート
ovr_unity_0.5.0.1_lib.zip内のOculusUnityIntegration.unitypackageをインポート
2. Final IK beta0.5のインポート
Final IKをAssetStoreでポチってインポート
3. Final IK OVR add-on (Unity4 / Unity5)のインポート
使用しているUnityのバージョンに合わせて入手
FinalIK_OVR_Unity4.unitypackage
FinalIK_OVR_Unity5.unitypackage
FinalIK_OVR_Unity5.unitypackageに旧バージョンのUnity 4 integrationが含まれるため、インポート時にOVRフォルダとPluginフォルダを除外する。
インポート完了。FinalIk OVRフォルダが追加される。
但し、旧バージョンのOculusSDK向けのaddonのため、次のようなエラーが発生する。
Assets/FinalIK OVR/Scripts/OculusSetup.cs(35,42): error CS1061: Type `OVRPlayerController' does not contain a definition for `useProfileHeight' and no extension method `useProfileHeight' of type `OVRPlayerController' could be found (are you missing a using directive or an assembly reference?)
4. Final IK OVR add-on (Unity4 / Unity5)のOculusSDK 0.5対応
OculusSDKのバージョンアップで何かしらの変更が加えられて、「useProfileHeightがOVRPlayerControllerにない」ので、とりあえずFinal IK OVR add-onに含まれているOVRフォルダと0.5のOVRフォルダをDiff。
どうやらuseProfileHeightから、よりOculusRuntimeで設定したProfileのいろんなデータにアクセスするイメージの強いuseProfileDataに名前がリファクトされた模様。
対応としてはAssets\FinalIK OVR\Scripts\OculusSetup.csのuseProfileHeightをuseProfileDataへ書き換えでOK。
ソースを読んでいると名前の変更などなど、OculusSDK 0.4.4→0.5でOculusRuntime側にOculus周りのものを持たせる仕組みにシフトしている様子がうかがえる。 更に今後はUnrealEngine4のようにエンジン側に統合されていく流れでもあり、おそらくこの記事の賞味期限は恐ろしく短い。
FinalIKでOculusRiftDK2のヘッドトラッキング、ポジショントラッキングを行う方法
【実装】最小実装(Full Body Biped IK+Head Effector)
キャラ、unitychanを配置
- OVRPlayerControllerの子にキャラのモデルデータを配置
- キャラのモデルデータにFullBodyBipedIK.csをアタッチ
- 数値部分のみを次のように変更
Oculusのカメラの起点となるHead Effectorを配置
- CenterEyeAnchorの子に空のHead Effectorオブジェクトを作成
- FBBIKHeadEffector.csをアタッチ
- 次のように設定する。
Bend Bones(Oculusヘッドトラッキングやポジショントラッキングによって体のひねりの影響を与える背骨、首のボーン)やStretch Bones(Oculusのポジショントラッキングで伸びるボーン)の指定をunitychanにFullBodyBipedIK.csをアタッチしたときに自動設定される内容を参考に設定。 - Head EffectorのTransformの値がキャラ顔の位置、回転になるため、上の画像のTransformの設定を参考に設定。
PositionのY軸はキャラの身長で変更。Play時に首長族になる場合は調整する。
FinalIK OVRアドオン
機能概要
FinalIK OVRアドオンが提供する機能は5つ
- ゲームスタート時の汎用的な初期化の仕組み
OculusSetup.cs - キャラクターのモーションを再生するMecanim連携OVRAnimatorController.cs
- 同構成の複数キャラのモーション同期
Basicシーン。Mirror.cs - 視点でVR空間内のものを操作
Interactionsシーン。OVRInteractionController.cs、OVRInteractionUI.cs、Phone.cs - FPSゲーム向けの武器
Amingシーン。OVRAimingController.cs、WeaponBase.cs、WeaponRifle.cs
ファイル構成
アドオンと謳いつつnamespaceが全部Demoな、まぁそんな感じのフォルダ構成になっています。
各スクリプトが持つそれぞれの設定値の説明は、アタッチ後のInspectorで項目にマウスカーソルを持っていくとツールチップに説明が表示されます。
FinalIK OVR/ ├─Animations/ ├─Materials/ ├─Models/ ├─Prefabs/ ├─Scenes/ │ Aiming.unity │ Basic.unity │ Interactions.unity │ ├─Scripts/ │ FixFeet.cs │ Mirror.cs (オプション)Targetに設定した同じ構造のものと動きを同期させる(参考 Basicシーン) │ OculusSetup.cs Rキーでゲーム開始。キャラの初期化など │ OVRAimingController.cs (オプション)武器持ちの場合に使う(参考 Amingシーン) │ OVRAnimatorController.cs キャラクターの移動アニメーション用。※AnimatorへHumanoid ThirdPerson.controllerを設定するか、同じParametersを設定必須 │ OVRInteractionController.cs (オプション)視点でイベントを発火する仕組みを提供。指定した時間で実行(参考 Interactionsシーン) │ OVRInteractionUI.cs (オプション)視点のカーソル表示とイベントを発火するまでの時間をプログレスバーのUIで表示(参考 Interactionsシーン) │ Phone.cs (オプション)VR空間内で操作できる端末の実装サンプルスクリプト(参考 Interactionsシーン) │ WeaponBase.cs │ WeaponRifle.cs │ └─Textures/
FinalIK OVRアドオンの使い方
サンプルシーンで動作を確認する
FinalIK OVRアドオンに含まれるサンプルシーンは3種類。
Rキーでスタート。(OculusSetup.cs)
Basic
複数の同じキャラのモーションを同期するMirror.csを使用したデモ。
増やす場合はMirror ~を複製。OculusSetup.csのEnable On Rに追加。
Aiming
FPS実装デモ。
マウスカーソルの移動で照準のAmingと頭の向きの変更を行うこともやっています。
任意の武器を追加する方法
Weapons Anchor以下にWeapon MP40と同じように配置。配置するPositionは、Weapons AnchorにアタッチされているDisable状態のCameraコンポーネントをEnableにして、ちょうど中心になるように配置する。(配置終わったらDisableに戻す)
Interactions
視点で操作する、インタラクティブなコンテンツを作るデモシーン。
【実装】キャラクターの移動モーションを連動させる
シーン開始時の初期化機能Oculus Setupを配置
- 開始時に場面に表示されるスタートメッセージのCanvasを、他のデモシーンからPrefab化して持ってくる
- 空のゲームオブジェクト Oculus Setupを作成。OculusSetup.csをアタッチ。設定を上の画像を参考に行う
移動モーション連動用のOVRAnimationControllerを設定
- unitychanのAnimatorコンポーネントにHumanoid ThirdPersonを設定
- unitychanにOVRAnimatorController.csをアタッチ。設定を上の画像を参考に行う