ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

【UE5】「1フレーム後に実行」が少し簡単に実装できるようになった話(Next Tick)

はじめに

記事名の通りですが、UE5から「1フレーム後に実行」を少し簡単に実装できるようになったという話
※ ↓「次フレーム」じゃなかったので記事にしました

まず結果・結論から


https://twitter.com/pafuhana1213/status/1533347622424940544/photo/1 (高解像度版)

[348]LogBlueprintUserMessages:  --- START ---
[348]LogScript: Warning: Script Msg: ThirdPersonMap_WP_C_43 CustomEvent_1 SetTimer passed a negative or zero time. The associated timer may fail to be created/fire! If using InitialStartDelayVariance, be sure it is smaller than (Time + InitialStartDelay).
[348]LogBlueprintUserMessages:  [UE4] delay 0 1st
[348]LogBlueprintUserMessages:  [UE5] Delay Until Next Tick
[348]LogBlueprintUserMessages:  [UE5] Set Timer for Next Tick by Event

[349]LogBlueprintUserMessages:  [UE5] Delay Until Next Tick After Using Set Timer
[349]LogBlueprintUserMessages:  [UE4] delay 0 2nd
  • Delay 0 の代わりにDelay Until Next Tickノードを使えるようになったので、0を入力する手間がなくなったよ
  • Set Timer でも Set Timer for Next Tick by Eventノードを使うことでDelay 0 的なことができるようになったよ
  • 1フレーム後に処理したい場合は複数使う必要がある仕様は変わってないよ

UE4では


Delay 0で同Frame内で処理が再開、Delay 0 * 2 で次のフレームで処理が再開という組み方ができました。
具体的な処理はLatentActionManagerの実装を確認ください。また、seiko_dev_memo - [UE4]Delayメモがとても参考になります。

このDelay 0でほんの少し処理を遅らせる仕様を利用することで便利になる場面もあったりします(が、バグの原因にもなりやすいので、EventDispatcherとかを使ってイベントドリブンに極力しようね!俺!)。

参考:
seiko_dev_memo - [UE4]Delayメモ
UE4 1フレーム処理をスキップさせる方法 - PaperSloth’s diary
【UE4】Delayノードについての検証 【★★~★★★】 | キンアジのブログ

また、Set Timerに0を指定しても機能しませんでした(ちなみに、0より大きい数値を指定してねというワーニングがでます)

LogScript: Warning: Script Msg: ThirdPersonMap_WP_C_43 CustomEvent_1 SetTimer passed a negative or zero time. The associated timer may fail to be created/fire! If using InitialStartDelayVariance, be sure it is smaller than (Time + InitialStartDelay).

UE5から


Delay Until Next Tickノードが追加されました。これはDelay 0と同じ処理を実行します。Next Frame ではないので、大まかな組み方は同じです。少し残念


また、Set Timer for Next Tick by Eventノードが追加されました。これにより、Delay 0 的な処理をSet Timer でもできるようになりました。少しうれしい。

個人的には1フレーム後に処理走ってほしいのですが、Delayノードに0を入力する手間がなくなったり、Set Timerの制限が緩和されたので少し便利になったよという話でした。

追記:顧客が本当に欲しかったFrame指定Delay


しゅごい!!!ありがとうございます!!!

おしまい。