Gaming Life

一日24時間、ゲームは10時間

UE4 DelayとForLoopについて色々実験した

 ゲーム作ってると数秒おきにアクションを起こす、みたいなことをしたくなる。SideScrollerテンプレートだとこれをSet Timer By Function Nameを使って解決してるが直感的にはForLoopのLoop Bodyに処理とDelayを置いて解決したい。だがこの方法ではうまくいかないことはUE4を多少触ったことがある人はわかると思う。

 というわけでDelayとForLoopを組み合わせた実験をしてみた。まだ完全な理解に至ってるわけじゃないが実験を通じなんとなくはDelayのことがわかったので実験結果を簡単にまとめてみる。

実験

 ForLoopとSequenceとPrintStringとDelayを色々組み合わせてPrintの表示の様子をみる。以降「0.2秒間を開ける」を「0.2s」と表記する。

1 f:id:ai_gaminglife:20171216141253p:plain

結果:Hello->Hello->Hello->Worldと間をおかず表示される

2 f:id:ai_gaminglife:20171216141324p:plain

結果:World->0.2s->Hello

3 f:id:ai_gaminglife:20171216141606p:plain

結果:Hello->Hello->Hello->World->0.2s->Hiroyuki

4 f:id:ai_gaminglife:20171216141651p:plain

結果:0.2s->Hello->0.3s->World

5 f:id:ai_gaminglife:20171216141734p:plain

結果:0.2sec->World->0.3s->Hello

6 f:id:ai_gaminglife:20171216141850p:plain

結果:0.2s->Hello->0.3s->World

7 f:id:ai_gaminglife:20171216141945p:plain

結果:0.2s->World->0.3s->Hello

 これだけ結果を見せればDelayがどんな挙動をするかは分かるはず。某ブログではDelayを「中断処理」ではなく「登録処理」と考えるとよいと書いてあったがまさにそのとおりだと思う

それでも

 Set Timerは個人的にわかりにくいのでちゃんとDelayで待ってからLoop Bodyの処理を順にできるFor Loopがほしい。そこで更に調べるとこんなマクロを組めば直感どおりの挙動をしてくれることが分かった。

f:id:ai_gaminglife:20171216142441p:plain

 とりあえずFor loop With Delayと名付けた。これを使えば

f:id:ai_gaminglife:20171216142533p:plain

結果:Hello->0.2s->Hello->World->0.2sec->Hello

と表示される。

 しかしこのマクロもそこそこ複雑なのでやはりSet Timerを使ったほうがよいという結論に至った。

 (12/18追記)

 Twitterですごくいい方法を教えてもらった。

 知らなかった…すごくいい方法なので今後これを使っていきたい