はじめに
記事名の通りですが、UE5から「1フレーム後に実行」を少し簡単に実装できるようになったという話
※ ↓「次フレーム」じゃなかったので記事にしました
今更で恥ずかしいですが、DelayだけでなくSet Timerに対しても『次フレームで実行』が追加されてたのね! #UE5 #UE5Study pic.twitter.com/rEWvjHyyQt
— おかず (@pafuhana1213) 2022年6月5日
まず結果・結論から
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
#UE5Study
— 恒吉星光 (@seiko_dev) 2022年6月6日
GFrameCounterを参照すれば、顧客が本当に欲しかったFrame指定Delayが作れるっぽい(要C++)。
Delayメモ記事にコード込で反映しました。https://t.co/XQpOQ2xseb pic.twitter.com/BxQ7F9bAQp
しゅごい!!!ありがとうございます!!!
おしまい。