Ue4でオブジェクトのマウスへのクリック判定・タッチ判定を取れるようにするやり方
レベル内に出現している、表示物へのマウスでのクリック判定・タッチ判定を取るやり方について書きます。
playerControllerへタッチイベントを有効にするようにする
オブジェクトへのタッチイベントを有効にするには、playerControllerへタッチイベントを有効にするよう伝えないといけません。
bluePrintでは、以下のようにplayerControllerを呼び出して、EnableTouchEvents関数を呼び出します。
これでタッチイベントが呼ばれるようになります。
クリック判定のコールバックが呼ばれるようにする
まず、タッチ判定・クリック判定を受け取りたい対象のBlueprintクラスを開きます。
そのBlueprintのあたり判定を司っているcomponentを選択します。
PapaperCharacterクラスの場合ですと、CapsuleComponentかSpriteということになります。
componentを選択すると、右端に詳細欄が表示されます。
詳細欄を下にスクロールすると、イベントという項目があり、その中に、
OnInputTouchBegin,OnInputTouchEnd,OnInputTouchEnter,OnInputTouchLeaveという項目があり、
これらがオブジェクトのタッチ・クリック判定に関連するイベントになっています。
発生させたいイベントの項目のプラスボタンをクリックすると、イベントのリスナーblueprintノードが作成されるので、
そこにイベント発生後の処理を書くことができます。
クリック・タッチイベント一覧
イベントの効用をまとめます。
OnInputTouchBegin | 対象がタッチ入力を受け取るとイベントが発生する |
OnInputTouchEnd | 対象がタッチ入力から解放されるとイベントが発生する 対象をタッチしたまま、対象のタッチ当たり判定範囲から離れてからタッチを解放すると イベントは呼ばれない |
OnInputTouchEnter | 画面がタッチされている時に、対象へタッチが移動するとイベントが発生する |
OnInputTouchLeave | 対象へのタッチが指が動いて解放されるとイベントが発生する |
オブジェクトへのクリック・タッチイベントが呼ばれない場合
タッチイベントを仕込んだcomponentのcollisionプリセットがpawnだとタッチイベントが発生しませんでした。
なので、collisionプリセットをカスタマイズするか変更する必要があります。
なぜ発生しないのか、特定するまでかなり時間がかかった。。。
オブジェクトに対し、当たり判定の設定がうまくいっていないと発生しないようなので、
注意してみてください
UnrealEngine4.21で確認しています。
初版:2019/9/14
最終更新:2019/9/14