読者です 読者をやめる 読者になる 読者になる

ぼっちプログラマのメモ

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

VR空間に手を出す為にしたこと (UE4 + RazerHydra, MotionControllerコンポーネント 編) その1

はじめに

RazerHydraというオーパーツを先日頂いたので、
早速、UE4で使ってみました。

もう生産されていないデバイスですが、
その過程で使用するMotionControllerコンポーネントは、
他のデバイス(OculusTouch, Move, HTC Vive Controller)でも
使うことになると思うので、少しは参考になるかと思います。

目的は、OculusTouchを想定したVRコンテンツ製作をできる環境づくりです。

結果動画

www.youtube.com
https://www.youtube.com/watch?v=2qJH-Zp_EyA&feature=youtu.bewww.youtube.com
www.youtube.com


本記事では、UE4でRazer Hydraを使うまでの流れと
実際にどう使うかについて書いてます。

手のモデルとの連動は、次の記事で…
(MotionControllerコンポーネントとAnimationBPとの連動が主です)

UE4でRazer Hydraを使えるようにするまで

有志の方がUE4用のプラグインを公開しています。
しかも、UE4のバージョン更新に即対応してくれるため、
こちら側でビルドする必要はほぼありません!ありがたや~
Razer Hydra Plugin
getnamo/hydra-ue4 · GitHub


手順は以下のとおりです。

  1. ↑のGithubページの右にある「Donwload ZIP」からzipファイルをダウンロード
  2. zipファイルを解凍
  3. 「HydraPlugin」フォルダを、使用するプロジェクトのPluginsフォルダに入れる
    1. Pluginsフォルダがなければ、プロジェクトのルート(uprojectファイルがある所)にPluginsを自分で作成
  4. プロジェクトを開いている場合は、エディタを再起動

これで準備完了です。


MotionControllerコンポーネント( with Razer Hydra )

公式ドキュメント(未翻訳)
Unreal Engine | Motion Controller Component Setup

概要

UE4.9にて、モーションコントローラ用のコンポーネントが追加されました。
はじめに書いた通り、様々なモーションコントローラ系デバイスに対応しています。
Unreal Engine 4.9 リリース!

↑の説明にあるように、デバイスに依存しないインターフェースであるので、
このコンポーネントを使うことで、他のモーションコントローラに
実装を流用できる可能性が格段に高くなる…筈です。

また、UE4.10で反応・精度の向上対応が入ったりと、
今後にかなり期待できるコンポーネントです。
Unreal Engine 4.10 リリース!

そんなコンポーネントにRazerHydraプラグインは対応しています。
プラグイン作者様には本当に感謝です…

使い方

f:id:pafuhana1213:20151126004622p:plain
(githubの説明画像を引用)

まずは↑のように、
左手用・右手用のMotionControllerコンポーネント
Actorに追加します。

f:id:pafuhana1213:20151126004958j:plain

次に、各コンポーネントにパラメータにある「Hand」のパラメータを、
そのコンポーネントが担当する手に応じて設定します。

f:id:pafuhana1213:20151126010803j:plain
最後に、
RazerHydraを使う場合は「HydraPlugin」コンポーネントを、
HTC Vive Controllerの場合は、「SteamVRChaperone」コンポーネント
Actorに追加します。


これで終わりです。実行すると、
コンポーネントの座標がデバイスの位置に応じて変化します。

そのままだと座標が分かりづらいので、各コンポーネント
メッシュコンポーネントを親子付けすると確認しやすくなります。
f:id:pafuhana1213:20151126005600j:plain
(公式ドキュメントより引用)

または、Arrorコンポーネントを親子付けすると
座標と向きの確認がしやすくなります。


その他の機能に関しては、Githubページにある解説を
参考にするのがいいかと思います。
絵付きでとてもわかり易いです。
getnamo/hydra-ue4 · GitHub


注意

コンポーネントのTransformに関して

コンポーネントを追加したアクターのワールド座標・回転(レベル上での値)が、
そのデバイスにおける基準点になります。
(自信はあまりないですが…)

そして、MotionControllerコンポーネントの初期座標・回転は無視されて、
↑の基準点と各コントローラの基準点からの座標を元に計算されたワールド座標・回転が
そのコンポーネントのワールド座標・回転に置き換わります。

なので、MotionControllerコンポーネントのBP上での座標(RelativeLocation)は
好きな位置に設定して大丈夫です。
私の場合は、どっちが右手用か左手用か分かるように、
中心座標から少しズラして配置してます。
f:id:pafuhana1213:20151126010642j:plain

コンポーネントを追加するActorに関して

MotionControllerコンポーネントは、Cameraを持っているActorとは
別のActorを用意し、そのActorに追加した方がいいと思います。

もしCameraを持ったActorに追加した場合、カメラ操作により、
デバイス基準点のUE4上における座標・回転が変化してしまうため、
想定しているものとは異なる挙動を起こすようになります。

現実空間でのデバイス基準点をユーザの胸元にくっ付ける場合は、
カメラを持ったActorに持たせてもいいかも知れませんが、
大抵のケースでは別のActorに持たせたほうが良いと思います。



とりあえず、今回はここまで。
次回は手のモデルとの連動部分や、説明をサボった箇所について触れます

追記

ようやく続き書きました
pafuhana1213.hatenablog.com