ひつじTips

技術系いろいろつまみ食います。

[UE4]キーボードイベントの短押し/長押し切り分け処理

Unity勢に負けずにUE4勢もがんばりましょう!

ということで,UE4の小ネタです.

UE4はブループリントでキーイベントなど簡単に取れるのですが,短押しだけでなく長押しも取りたいよね,というお話です.

以下の方法もありますが,本記事で紹介するのは長押し時のイベントを取るようなバージョンです.

miyahuji111.hatenablog.com

やりかた

「SetTimerByEvent」ノードを使います.

以下のようなマクロ(「KeyEventSwitcher」)を作ると,キーイベントの長押し/短押しを切り分けて処理できます.

f:id:mu-777:20181127234705p:plain

仕組みは凄くシンプルで,

  • PressしてからLongPressDuration過ぎる前にReleaseしたら,ShortPressedEventをセットしてすぐ発火させる
  • PressしてからセットしたLongPressedEventが発火したら,ShortPressedEventはセットしない

という感じです.

使うときはたとえば以下のように使います.

f:id:mu-777:20181127231527p:plain

このときEnterを押して,

  • 2秒以内にEnterを離せば(Releaseすれば)ShortPressedEventが呼ばれます.
    • そのあと,KeyEventSwitcherの後ろのExecピンのShortPressReleasedからの処理が走ります
  • 2秒間Enterを押し続けていれば,LongPressedEventが呼ばれます
    • そのあと,Enterを離したタイミングでKeyEventSwitcherの後ろのExecピンのLongPressReleasedからの処理が走ります

という処理になります

かくにん

実際このKeyEventSwitcherマクロを使うとどうなるか確認します.

レベルブループリントに,以下のようなノードを組みます.

f:id:mu-777:20181127233113p:plain

ここで「PrintMessage+Time」とは,引数のStringに時間をつけてPrintしてくれるだけのマクロです.

f:id:mu-777:20181127231806p:plain

これを実行してみます.

すると,以下のようにプリントされます.

f:id:mu-777:20181127233512p:plain

ちゃんと,

  • Pressして2秒以内にReleasedしたら「ShortPressed」が
  • Pressして2秒経ってもReleaseされなければ「LongPressed」が

呼ばれていると思います!

さいごに

まぁ正直ぼくもUnityの方が好きですけど...

ブループリントのマクロはパズル的面白さがあって,これはこれで好きです笑