敵の出現方法と敵が全滅したら脱出地点を出現させる方法で3日くらい悩んだ。以下、成果物。思っていた通りにできた。
Gunfire Reborn的なやり方を実装したかった。開始すると敵が出る→敵を全部倒すとポータルが出る→ポータルで次のステージへという流れ。問題は敵を発生させるスポーンシステム、敵の全滅を検知するシステム、全滅したらポータルを出すシステムの三つ。
敵をスポーンさせるシステム。ボックス型のコリジョンを二つ用意し、一つはプレイヤーが触れると起動するトリガー、もう一つは敵をスポーンさせる範囲の為に使用。トリガーに触れるとスポーンカウントに応じて敵のアクターをスポーンさせるという風に組んだ。スポーンカウントとスポーンエネミーの変数はパブリックにして、レベルエディターから変更できるようにしておいた。
敵の全滅を検知するシステム。Get All Actors with TagでEnemyタグの付いた敵を検索し、0ならばポータルを出現させる。Tickで走らせると確実だが負荷が高いのでカスタムイベントを作り、イベント駆動式にした。
敵のアクターにEnemyのタグを付ける。敵が死ぬと死体のDeadを呼び出してからDestroy Actorで消えるようにしている。
死体出現時にGet All Actors of Classで敵の全滅を検知するシステムのイベントを呼ぶ。
ポータルはHiddenにしておいて、全滅を検知するシステムがポータルを呼んだら出現&コリジョンONにする。
これでレベルブループリントに依存することのなく、汎用的なシステムを組めたのでよしとする。
これを考えている時にUIのイベント駆動も思いついたので全部作り変えた。前まではEpicのチュートリアル通りにバインドで体力や弾薬の変数を拾っていたがそれだと毎秒拾ってくるようだった。変数が変わった時だけUIを更新するイベント駆動の方が負荷は低くなるだろう。UIの情報が多いのでかなりスパゲッティ化していて、もっと綺麗にしたい欲求があるがこれはビジュアルスクリプトの宿命かもしれない。