■はじめに

GGJ2015に参加してきてカタギ花嫁の敵の車のAIを担当しました。

<大雑把な仕様>
プレイヤーの車を追いかけ回す
プレイヤーの弾を3発食らってHPが0になったら爆発してスコアに加点
プレイヤーとの距離が遠過ぎたら速度アップ、近過ぎたら減速
プレイヤーに向かって弾を撃つ

 突貫で作ったのでグッチャグチャのスパゲッティです。
もうちょい何とかしてみましょう。
今回はコラプス(折りたたみ)とRerouteノード、シーケンスを使って何とかします。


2015-01-29 19_33_28-BP_EnemyCar
 一応コメント(グレーの四角い領域)で処理を大雑把に分けましたが、グチャグチャですね。

■数珠繋ぎイベントTickを何とかする
Tickによる毎フレーム処理が非常に煩雑です。
Tickで動かしたい処理は、大雑把に
Chase(とCheck GameInstance is Start), CheckHP(とAddScore), AdjustChaseSpeed, Shoot
の4つくらいがあります。
Tickを復数書けるならそれぞれ処理群の頭にひとつずつ書きたいところですが、ひとつのBPにひとつのTIckノードしか存在できないようです。
その為、それぞれの処理群を無理やりノードで数珠繋ぎにしており非常に処理を追い難いです。

非常にスパゲッティで読み辛いですが、上図は
・イベントTickノード(Chase処理群内、左上の赤いノード)
から始まって
Chase(とCheck GameInstance is Start)処理群

CheckHP(とAddScore)処理群

AdjustChaseSpeed処理群

Shoot処理群
という実行線の数珠繋ぎ

・イベントHitノードから伸びたCheck Bullet Hit処理群
という構成になっています。

2015-01-29 20_11_35-BP_EnemyCar
取り敢えず、シーケンスを使ってそれぞれの処理を分割します。
Tickのあとにシーケンスノードを書いて、4本に分けます。
(シーケンスノードは上から順に実行するノードです)
これを使えば、4つの処理群を実行線で無理やり数珠繋ぎにする必要がなくなります。

2015-01-29 20_13_55-BP_EnemyCar
大雑把に4つの処理の塊を分けました

route
ちなみにシーケンスノードの右上のこのくねっとした部分は

2015-01-29 20_16_21-BP_EnemyCar_
ChaseからAdjust Chase Speedへ伸びる長い緑の線がCheckHPの辺りを跨っていて煩雑だったので、
Rerouteノードを使って整理しました(整理前の画像)


2015-01-29 20_18_15-BP_EnemyCar_
線を引いて…

2015-01-29 20_17_11-BP_EnemyCar_
Rerouteノードを追加で作れます
特に動作上は意味のないノードですが、線の位置を綺麗に調整したいときに便利です。
(今回の例だと大して綺麗になっていないですが…)

■ノードを折り畳む(コラプス)

2015-01-29 20_23_44-BP_EnemyCar
処理の塊を選んで右クリック→ノードを折り畳むで

2015-01-30 01_32_33-BP_EnemyCar
小さく折り畳まれます
コラプス名はわかりやすいようにChaseに書き換えました

2015-01-29 20_26_18-BP_EnemyCar_
ダブルクリックすればChaseコラプスの中を見ることができます

2015-01-29 20_29_31-BP_EnemyCar_
EventGraphをクリックすれば元の階層に戻れます

2015-01-29 20_29_50-BP_EnemyCar_
Chaseコラプスのタブを閉じたら、EvnetGraphタブが消えちゃったんだけど?ってひとはここをダブルクリックで開き直せます

2015-01-29 20_36_37-BP_EnemyCar_
全部の処理群をコラプスで畳んでみました

2015-01-29 20_41_22-BP_EnemyCar
近付けてみました
全体像が見易くなりましたね

2015-01-29 20_41_35-BP_EnemyCar
コラプスの中身を見るときはノードをダブルクリックでもいいですが、
ここの画面から直接ダブルクリックでも開くことが可能です

これでかなりスッキリしました。
次はコラプスの中の処理群を弄っていきます。

その2