Unity勢に負けずにUE4勢もがんばりましょう!
ということで,UE4の小ネタです.
UE4はブループリントでキーイベントなど簡単に取れるのですが,短押しだけでなく長押しも取りたいよね,というお話です.
以下の方法もありますが,本記事で紹介するのは長押し時のイベントを取るようなバージョンです.
やりかた
「SetTimerByEvent」ノードを使います.
以下のようなマクロ(「KeyEventSwitcher」)を作ると,キーイベントの長押し/短押しを切り分けて処理できます.
仕組みは凄くシンプルで,
- PressしてからLongPressDuration過ぎる前にReleaseしたら,ShortPressedEventをセットしてすぐ発火させる
- PressしてからセットしたLongPressedEventが発火したら,ShortPressedEventはセットしない
という感じです.
使うときはたとえば以下のように使います.
このときEnterを押して,
- 2秒以内にEnterを離せば(Releaseすれば)ShortPressedEventが呼ばれます.
- そのあと,KeyEventSwitcherの後ろのExecピンのShortPressReleasedからの処理が走ります
- 2秒間Enterを押し続けていれば,LongPressedEventが呼ばれます
- そのあと,Enterを離したタイミングでKeyEventSwitcherの後ろのExecピンのLongPressReleasedからの処理が走ります
という処理になります
かくにん
実際このKeyEventSwitcherマクロを使うとどうなるか確認します.
レベルブループリントに,以下のようなノードを組みます.
ここで「PrintMessage+Time」とは,引数のStringに時間をつけてPrintしてくれるだけのマクロです.
これを実行してみます.
すると,以下のようにプリントされます.
ちゃんと,
- Pressして2秒以内にReleasedしたら「ShortPressed」が
- Pressして2秒経ってもReleaseされなければ「LongPressed」が
呼ばれていると思います!
さいごに
まぁ正直ぼくもUnityの方が好きですけど...
ブループリントのマクロはパズル的面白さがあって,これはこれで好きです笑