【Unity】敵のAIはArbor3で解決【第5回】
Visual Scriptingを知ってから
スクリプティブなEnemy制御から覚えてきた自分には
こういったEnemyのアルゴリズムを視覚的に(ノードベース)
リアルタイムで確認できる仕組みは画期的だった
VirtualScripting(旧Bolt)が出たときは結構ワクワクしながら使っていたのを覚えている
簡単な挙動では、C#の方が圧倒的に早く楽に作成することができるが
複雑な挙動をさせるときは、素人の私は兎に角スクリプトの作成に時間をかけまくった記憶があります
そもそもどこで挙動が不備を起こしているかがわからなかったり
参照している値がこんがらがったり、条件分岐がわけわかんなくなったり
おかげでスクリプトの勉強にもなったのですが
まぁほんとに苦戦したわけです
しばらくしてBoltが無料アセットとしてユニティにやってきた
好奇心旺盛だった私はとりあえず、食いついたのを覚えています
最初はスクリプトなら1行や2行の記述で済むのにと思うことも少なくなかったですが使っていくうちに、ノードベースの利点に気づくことになります
リアルタイムで挙動のデバッグができる
まぁ当たり前っちゃ当たり前のことのなんですが、実行している際、思い通りの挙動にならなかったときスクリプトをにらめっこしたり、ところどころにdebug.logを出したりって素人には結構苦行だったんですよ
Boltではリアルタイムでノード上の挙動を確認できるのが超強力でした
つまづいているところや、うまくデータを取得できていないところ
キャッシュしてしまってエラー出ているタイミング、などなど
設計しながら不備を見つけられるのは非常に画期的だった
またエディタ上で数値のコントロールができるのもうれしいポイントでした
このリアルタイムでのデバッグ、とその可視化は私にはとても役に立ったのですわ
さらに複雑な挙動や条件分岐
ここまでは、正直C#スクリプトの延長線でしかない
しかし、挙動が複雑化したり複数の条件分岐を敵AIに組み込むのは結構骨が折れる
そこで今回のタイトル回収『arbor3』の出番だ
behaviortree + statemachinebehaviorによる拡張エディタって強すぎイイイ
arbor3のbehaviortreeはシークエンサーとセレクターの条件分岐と各種演算ノードの組み合わせでAIの挙動を作ることができる
プレイヤーまでの距離、仲間が何体いる、視界内にいる、HPがいくつ以上の時、特定のアイテムを所持している、確率、乱数…等々
複数の条件の組み合わせの時にどのような挙動をするのか、リアルタイムに条件が変わったときに次の挙動へはどのように変異するのかこれ全部C#で作るのは正直私のスキルではしんどい
こういったエネミーAIをbehaviortreeでは簡単に構築することができる
さらにbehaviortreeではstatemachinebehaviorを設定することができる
statemachinebehaviorは一つ一つの挙動を管理・偏移するのに最適だ
例えば、Enemyがプレイヤーを見つけ、接近し、特定の距離に近づいたときに「必殺技のアニメーションを実行」「MPを消費」「カメラの制御のスクリプトを実行」「アニメーションに非同期でエフェクトを発生」のような行動を実行させるときに、このstatemachinebehaviorでサブステートマシーンを作成することでbehaviortreeに組み込む形で実行することができる
何にしてもできること多すぎ、簡単のアセットだ
AI制御させるオブジェクトを作るうえでは、可能性はかなり広い
できることの多い汎用性の高いアセットだ
本作はほとんどのEnemy制御をこれで作成していく予定なので
実際のtreeの画像なんかも備忘録としてあげていけたらいいなと思います
次回は プレイヤー雫さんの アニメーションについて 書いていきます
ご覧いただきありがとうございました