[Unity]VR上でのジェスチャーによる武器召喚(未完成)

Infinite Gesture

Infinite Gestureというジェスチャーをインタフェースとして登録できるフリーのアセットがあることを最近知ったので、今回はそれを使って「ジェスチャーで剣を召喚する」ことにチャレンジしてみました。イメージとしては手でなぞった部分に沿って剣が現れる、といったものが目標です。

summon_sword_illust

Infinite Gestureの準備

InfiniteGestureAsset

とりあえずAsset StoreからInfinite Gestureをインポートし、それから細かいセッティングをしていきます。

Oculus Utilitiesパッケージ内のOVRPlayerControllerをシーンにドロップし、子要素であるOVRCameraRigにインポートとしたアセット内のVR Gesture Rigスクリプトをコンポーネントとして追加します。vr_gesture_rig

VR Gesture RigのパラメータはAuto Setupボタンを押すだけで自動で設定してくれます。

次にToolsからVR Infinite Gestureを選択し、VR Gestureウインドウを表示させます。

toolsGesture

ジェスチャーの追加やその他の設定はこのVR Gestureウインドウで行うことができます。

ジェスチャーの追加自体の方法は非常に簡単なもので公式のチュートリアル動画を参考にさせていただきました。この時に剣を出現させる適当なジェスチャーを追加しておきます。

スクリプトへの応用方法

作成したジェスチャーをスクリプトで利用する際、いくつか必要なことがあります。

まずusingを用いてInfinite Gestureのメソッドを呼び出すために上記のような宣言を行います。

次にシーン上でジェスチャーを読み取るものを起動するために、 以下のスクリプトを記述します。

あとは以下の様なジェスチャーを読み取るメソッドを追加します。OnGestureDetectedメソッドはジェスチャーが起こった際、そのジェスチャーの名前やジェスチャーを行っている、またそのジェスチャーが片手か両手かどうかを引数として読み込みます。そのため特定のジェスチャーで何かしらのメソッドを呼び出したい場合は、このOnGestureDetectedメソッド内にその処理を記述すればよいわけです。

また実際にゲームシーンに取り入れる際には、VR GestureウインドウのShow VRUIのチェックを外し、Begin In Detect Modeチェックを入れることで、ジェスチャーの登録UIを非表示にし、その状態でジェスチャーを読み取ることができます。gestureWindow

武器召喚プログラムの作成

とりあえずそれっぽいようなジェスチャーを追加できたら、いよいよ出現する剣自体を設定していきます。

武器の準備

今回は召喚する剣のモデルとしてFree Katana and Scabbardというアセットを使用しました。

インポートしたアセットをシーン上にドロップし、RigidbodyBoxCollider及びOculus UtilitiesのOVRGrabbableスクリプトをコンポーネントとして追加したものをプレファブ化すれば剣自体の設定は完了です。

sword_com

スクリプトの追加

最後に剣を出現する処理を作成していきます。

OnGestureDetectedメソッド内で、switch文を用いて指定したジェスチャーの名前に対応したメソッドを実行しています。SummonSwordメソッドでは、剣が出現する位置をOnGestureDetectedメソッドから受け取ったの位置、また特定の角度を指定し、剣をInstantiateメソッドで出現させています。

summon_katana

上の感じだと一応それっぽくはなったのですが、角度の設定がいまいち上手くいかず、他の向きでジェスチャーを行った場合、求めてない方向に剣が現れるといった問題が起こったので、現在は解決方法探しに苦しんでいます…

summon_katana_ng

まとめ

色々と長くなりましたが、Infinite GestureはVR空間上でジェスチャー登録ができるといった点で、見た目的にも操作しやすく比較的便利であるような印象を得ました。少しプロジェクトに取り入れるだけでも、使ってみて楽しい、ワクワクするようなものなので非常におすすめしたいです。

コメント

タイトルとURLをコピーしました