ゲーム作ってると数秒おきにアクションを起こす、みたいなことをしたくなる。SideScrollerテンプレートだとこれをSet Timer By Function Nameを使って解決してるが直感的にはForLoopのLoop Bodyに処理とDelayを置いて解決したい。だがこの方法ではうまくいかないことはUE4を多少触ったことがある人はわかると思う。
というわけでDelayとForLoopを組み合わせた実験をしてみた。まだ完全な理解に至ってるわけじゃないが実験を通じなんとなくはDelayのことがわかったので実験結果を簡単にまとめてみる。
実験
ForLoopとSequenceとPrintStringとDelayを色々組み合わせてPrintの表示の様子をみる。以降「0.2秒間を開ける」を「0.2s」と表記する。
1
結果:Hello->Hello->Hello->Worldと間をおかず表示される
2
結果:World->0.2s->Hello
3
結果:Hello->Hello->Hello->World->0.2s->Hiroyuki
4
結果:0.2s->Hello->0.3s->World
5
結果:0.2sec->World->0.3s->Hello
6
結果:0.2s->Hello->0.3s->World
7
結果:0.2s->World->0.3s->Hello
これだけ結果を見せればDelayがどんな挙動をするかは分かるはず。某ブログではDelayを「中断処理」ではなく「登録処理」と考えるとよいと書いてあったがまさにそのとおりだと思う
それでも
Set Timerは個人的にわかりにくいのでちゃんとDelayで待ってからLoop Bodyの処理を順にできるFor Loopがほしい。そこで更に調べるとこんなマクロを組めば直感どおりの挙動をしてくれることが分かった。
とりあえずFor loop With Delayと名付けた。これを使えば
結果:Hello->0.2s->Hello->World->0.2sec->Hello
と表示される。
しかしこのマクロもそこそこ複雑なのでやはりSet Timerを使ったほうがよいという結論に至った。
(12/18追記)
Twitterですごくいい方法を教えてもらった。
突然失礼します。Set Timer 使った方法だとこんなんがありますがいかがでしょう。ズレてたらごめんなさい。 pic.twitter.com/BDiZ3atQsZ
— 福助8.5号 (@fukusuke8gou) 2017年12月17日
知らなかった…すごくいい方法なので今後これを使っていきたい