4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【UE4】Unreal engine4で長押し処理を実装する

Last updated at Posted at 2023-03-26

結論

Unreal engine4にはデフォルトで長押しを処理してくれるノードが存在しません。
代わりに以下のノードで長押し処理が実装可能です!3秒以上長押しすると文字が出力されます。(最後に追記で書きましたが、Timelineを使った実装方法のほうがスマートだと思います。)
image.png

簡単に解説

Pressすると、GateがOpenになります。3秒後にまだGateがOpenであれば、Print stringが実行されます。
3秒以内にReleasedしてしまうと、GateがCloseされます。

  • Tickは使いたくない
  • 長押し機能のためだけに変数やカスタムイベントは増やしたくない

と考えて作った実装ですが、そもそも大して重くないので自己満足かもしれません。
でもキレイな実装だと思いませんか?(にっこり)

なぜDelayではなくRetriggerable Delayなのか

DelayではなくRetriggerable Delayを使っている理由は、以下の例を考えるとわかるかと思います!

もしDelayだった場合、「1秒間押す。1秒間離してまた押す。さて2回目押してから何秒後に長押し判定されるでしょうか?」

長押し判定されるべきはもちろん2回目押してから3秒後です。
しかし、Delayを使ってしまうと2回目押してから1秒後に文字が出力されてしまいます。

Retriggerable Delayについては以下の記事がわかりやすかったです。
http://meganeo.blog.shinobi.jp/ue4/%E3%80%90ue4%E3%80%91delay%E3%81%AE%E4%BB%B6

最後に

何秒間長押しされているかの情報がとりたい、といった場合だと別の方法を使ったほうがいいと思います。
とりあえず単純に長押し判定をしたいときにぜひ使ってみてください!

また、UE5にはデフォルトで長押し処理の機能(Enhanced Input)が実装されているので、この記事はいづれ化石となることでしょう...()

短押しと長押しを区別したい場合はこの記事が参考になるかもしれません。マクロにしちゃえば何回も使い回せて素敵ですね。
https://qiita.com/mu-777/items/52e9d6f92034521f26a0

それでは、良きUnrealライフを!

追記(2023/12/31)

あれ...?TimeLineでよくね???
image.png

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?