Ue4でオブジェクトのマウスへのクリック判定・タッチ判定を取れるようにするやり方

レベル内に出現している、表示物へのマウスでのクリック判定・タッチ判定を取るやり方について書きます。

UnrealEngineでオブジェクトへのタッチイベントを有効にする

playerControllerへタッチイベントを有効にするようにする

オブジェクトへのタッチイベントを有効にするには、playerControllerへタッチイベントを有効にするよう伝えないといけません。

bluePrintでは、以下のようにplayerControllerを呼び出して、EnableTouchEvents関数を呼び出します。

Blueprintで、playerControllerに対してタッチイベントを有効にする

これでタッチイベントが呼ばれるようになります。

クリック判定のコールバックが呼ばれるようにする

まず、タッチ判定・クリック判定を受け取りたい対象のBlueprintクラスを開きます。

そのBlueprintのあたり判定を司っているcomponentを選択します。

PapaperCharacterクラスの場合ですと、CapsuleComponentかSpriteということになります。

componentを選択すると、右端に詳細欄が表示されます。
詳細欄を下にスクロールすると、イベントという項目があり、その中に、
OnInputTouchBegin,OnInputTouchEnd,OnInputTouchEnter,OnInputTouchLeaveという項目があり、
これらがオブジェクトのタッチ・クリック判定に関連するイベントになっています。

タッチイベントを呼ぶためのBlueprint詳細画面

発生させたいイベントの項目のプラスボタンをクリックすると、イベントのリスナーblueprintノードが作成されるので、
そこにイベント発生後の処理を書くことができます。

タッチイベントのBluerprintノードの生成画面

クリック・タッチイベント一覧

イベントの効用をまとめます。

OnInputTouchBegin 対象がタッチ入力を受け取るとイベントが発生する
OnInputTouchEnd 対象がタッチ入力から解放されるとイベントが発生する
対象をタッチしたまま、対象のタッチ当たり判定範囲から離れてからタッチを解放すると
イベントは呼ばれない
OnInputTouchEnter 画面がタッチされている時に、対象へタッチが移動するとイベントが発生する
OnInputTouchLeave 対象へのタッチが指が動いて解放されるとイベントが発生する

オブジェクトへのクリック・タッチイベントが呼ばれない場合

タッチイベントを仕込んだcomponentのcollisionプリセットがpawnだとタッチイベントが発生しませんでした。
なので、collisionプリセットをカスタマイズするか変更する必要があります。

なぜ発生しないのか、特定するまでかなり時間がかかった。。。

オブジェクトに対し、当たり判定の設定がうまくいっていないと発生しないようなので、
注意してみてください

UnrealEngine4.21で確認しています。

初版:2019/9/14
最終更新:2019/9/14

このエントリーをはてなブックマークに追加