Leap motionを用いた物体移動
12/6にOculus Touchが発売されたということでおそらくもうLeap motionで
代用することもないと思いますが、何かあったときのためにここにメモしておきます。
ちなみにUE4のver4.13だとなぜか出来なかったのでそれ以下をおすすめします。
(私は4.12を使用しました。)
手順
①プラグインのダウンロード
以下のGithubからLeap motionのプラグインをダウンロードします。
②プラグインを使用可能に
「編集→Plugins→Input Devices」にあるLeap Motion PluginのEnabledのところにチェックを入れます。
③GameModeの作成
コンテンツブラウザの場所で右クリックメニューから「ブループリント→ブループリントクラス→Game Mode」を選択します。名前は適当に。(ここではLeapGameModeとします。)
④キャラクターを作成
「表示オプション→プラグインのコンテンツを表示」にチェックを入れます。その後、「LeapMotion コンテンツ→Blueprints→Rigging」からLeapRiggedCharacterをコピーし、自分のコンテンツブラウザに置きます。ここではLeapCharacterと呼びます。
⑤GameModeの設定
LeapGameModeを開き、Default Pawn Classを④のLeapCharacterにします。
⑥インターフェイスの作成
右クリックメニューから「詳細なアセットを作成→ブループリント→ブループリントインターフェイス」を選択します。ここではPickup Interfaceとします。下の画像のようにインプットにスタティックメッシュアクタとVector変数を追加します。
⑦キャラクターにインターフェイスを設定
LeapCharacterを開き、クラス設定を選択し、インターフェイスの部分に⑤、⑥で作成したインターフェイスを追加します。
⑧関数の作成(キャラクター) 1
関数(ここではClosest Handという名前にします)を作成し、関数内を以下のようにします。インプットにVector型、アウトプットにName型を追加し、ローカル変数にName型変数を追加します。
⑨関数の作成(キャラクター) 2
もう一つ関数(ここではPickup if Emptyという名前にします)を作成し、関数内を以下のようにします。インプットにスタティックメッシュアクタ変数とBoolean変数を作成します。Closest Handは⑧で作成したものです。
⑩関数の作成(キャラクター) 3
さらにもう一つ関数(ここではDrop if Not Emptyという名前にします)を作成します。
⑪キャラクターのイベントグラフ
LeapCharacterのイベントグラフを以下のようにします。イベントPickupは⑥で作ったものをコンパイルしておかないと出てきません。
⑫物体のブループリントを作成
動かしたいスタティックメッシュをレベル上に出し、詳細からブループリントを作成します。
⑬物体のブループリントのイベントグラフ
Does Implement Interface と Pickup のインターフェイスをキャラクターに追加したインターフェイスと同じにします。
すべてコンパイルしてプレイすると物体移動できるようになります。
物体を掴む条件として物体に手が当たっている(当たり判定がある)ことが条件で、グーのように握らないとGrabイベントが発生してくれません。また、手に強制的にひっつけている感じであり、実際に掴んでいるわけではないみたいです。
参考
UE4のLeap motion のプラグイン製作者が以下の動画で説明していました。