UE4 キー入力のリピート処理の実装(Timer、Set Timer by Function Name、Clear Timer by Function Name、Gate)
キー入力のりピート処理の実装についてです。
一度キーを押して入力を受付して、
その後、そのキーを押し続けると一定間隔でキー入力を受け付ける感じですね。
基本の考えはこちらのalweiさんのツイートをもとにしてみました。
ただし、これだと最初に押した瞬間からずっと同じ間隔で入力を受け付けてしまうようです。
うちがやりたかったのは「ピッ…ピ、ピ、ピ、ピ、ピ、ピ」みたいな入力なのですよね。
それと、こちらを参考にキーの押しっぱなし処理も作っていたので
上記と下記のものを組み合わせて処理をつくってみることにしました。
・UE4 BluePrintメモ その1
http://pafuhana1213.hatenablog.com/entry/2014/09/09/004928
そこでできたのがこんな感じのBPです。

なんて複雑な…。
「Print String」は入力が受け付けているかどうかのチェック用ですね。
実際には関数なりのキー押したときの処理を呼ぶ感じになりそうです。
基本的な考えはalweiさんのツイートにあるように
リピート部分を「Set Timer by Function Name」ノードのタイマーイベントでやっています。

キーを離すと「Clear Timer by Function Name」によって
タイマーがクリアされるようにしています。

そして、「ピッ…ピ、ピ、ピ、ピ、ピ、ピ」みたいな入力にするために
「Delay」ノードを使って一定時間後にタイマー処理に移るようにしてみました。

しかし、この「Delay」中にキーを離してしまうと
「Set Timer by Function Name」が実行される前に
「Clear Timer by Function Name」が実行されてしまいタイマーがずっと残ってしまうので
再度チェックして「Clear Timer by Function Name」を呼ぶようにしています。
なんて無駄な処理なのでしょう…(´;ω;`)ウッ…
そこでいろいろな人に聞いてみたところ「Gate」というノードがあるようです。
(あとでブログにメモする予定です)
これを使うともっとシンプルなBPにできるようなのでやってみました。
こんな感じに。

最後の「Clear Timer by Function Name」がなくなってすっきりしました!
一応これでやりたいことはできたのでいいかなーと。
最終的にはいろいろなキー入力があるため、関数化したほうが良さそうです。
とりあえずはやりたいことができたのでメモということで。
できればキー入力の押しっぱなしとリピート入力については
エンジンのデフォルト機能で実装してもらいたいなーと!
一度キーを押して入力を受付して、
その後、そのキーを押し続けると一定間隔でキー入力を受け付ける感じですね。
基本の考えはこちらのalweiさんのツイートをもとにしてみました。
はい。ちなみに僕がその手の押しっぱなし処理を実装する時はTimerを使います。たったこれだけで押している間に定期的な処理を呼び出せます。いわゆる、リピートキーというやつも簡単に実装できます。 pic.twitter.com/WHBlS2Ch07
— alwei@C93 1日目 東ケ27a (@aizen76) 2017年8月7日
ただし、これだと最初に押した瞬間からずっと同じ間隔で入力を受け付けてしまうようです。
うちがやりたかったのは「ピッ…ピ、ピ、ピ、ピ、ピ、ピ」みたいな入力なのですよね。
それと、こちらを参考にキーの押しっぱなし処理も作っていたので
上記と下記のものを組み合わせて処理をつくってみることにしました。
・UE4 BluePrintメモ その1
http://pafuhana1213.hatenablog.com/entry/2014/09/09/004928
そこでできたのがこんな感じのBPです。

なんて複雑な…。
「Print String」は入力が受け付けているかどうかのチェック用ですね。
実際には関数なりのキー押したときの処理を呼ぶ感じになりそうです。
基本的な考えはalweiさんのツイートにあるように
リピート部分を「Set Timer by Function Name」ノードのタイマーイベントでやっています。

キーを離すと「Clear Timer by Function Name」によって
タイマーがクリアされるようにしています。

そして、「ピッ…ピ、ピ、ピ、ピ、ピ、ピ」みたいな入力にするために
「Delay」ノードを使って一定時間後にタイマー処理に移るようにしてみました。

しかし、この「Delay」中にキーを離してしまうと
「Set Timer by Function Name」が実行される前に
「Clear Timer by Function Name」が実行されてしまいタイマーがずっと残ってしまうので
再度チェックして「Clear Timer by Function Name」を呼ぶようにしています。
なんて無駄な処理なのでしょう…(´;ω;`)ウッ…
そこでいろいろな人に聞いてみたところ「Gate」というノードがあるようです。
(あとでブログにメモする予定です)
これを使うともっとシンプルなBPにできるようなのでやってみました。
こんな感じに。

最後の「Clear Timer by Function Name」がなくなってすっきりしました!
一応これでやりたいことはできたのでいいかなーと。
最終的にはいろいろなキー入力があるため、関数化したほうが良さそうです。
とりあえずはやりたいことができたのでメモということで。
できればキー入力の押しっぱなしとリピート入力については
エンジンのデフォルト機能で実装してもらいたいなーと!
| UE4 | 12:37 | comments:0 | trackbacks:0 | TOP↑