ひつじぶろぐ

いろいろつまみ食います。

[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の方が好きですけど...

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