ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

【UE4+OculusRift】HMDカメラの座標を取得する方法

たまには、小ネタでサクッと更新
BPだけ見たい人は、「BPでCollision位置を補正」の項に飛んで下さい

はじめに

下のようにコンポーネントを組んで、
カメラに紐付けたCollisionBoxに当たるとダメージ、というゲームを作るとします。
f:id:pafuhana1213:20141111223628j:plain

通常ですと、単にCollisionBoxのHit・Overlapイベントを見るだけです。
しかし、OculusRiftを用いた場合はBPで一工夫する必要があります

理想と現実

OculusRift画面に切り替えた後のカメラを「HMDカメラ」とします。

OculusRiftのトラッキングHMDカメラが移動・回転するのですが、
切り替え前のカメラ(FirstPersonCamera)にはトラッキング結果が
反映されていません!

つまり、こんな事が起こってしまします(赤い□はCollision Boxです)https://dl.dropboxusercontent.com/u/30427841/130624matrix04topnew01.jpg

OculusRiftを被って盛大に避けても、実際の当たり判定位置が
変わりません。これではゲームになりません…

BPでCollision位置を補正

なので、以下のようなBPを組む必要があります
https://dl.dropboxusercontent.com/u/30427841/HMD%E3%82%AB%E3%83%A1%E3%83%A9.png


  1. まずは、OculusRift画面に切り替え中か?の判定を「Is Head Mounted Display Enabled」で行ってます。
  2. 次に、「Get Orientation and Position」でHMDカメラの位置・姿勢を取得します。この位置・姿勢は切り替え前カメラ(FirstPersonCamera)からの相対的な情報です。
  3. あとは、自身の位置 → 切り替え前カメラ → HMDカメラ → HMDカメラの前方20、という流れで座標を導き出して、CollisionBoxの座標を更新しています


参考:
Unreal Engine | 仮想現実 (VR) のベスト プラクティス