UE4ゲーム制作入門十八日目
一人UE4ゲーム制作入門アドベントカレンダー十八日目です。
今日はボスのAIを組みました。
全体はこんな感じです。
BTTask_CheckFlg
このタスクではAIコントローラに作った2つのフラグをブラックボードに反映しています。
それぞれのフラグの説明ですが、
isAttack : 攻撃モーションに移れるかどうか
isNextAct : 次のアクションを決める処理に移れるかどうか
になっています。これらが別れてる理由はあるのですが、今日は実装できてないので平日のどこかで説明すると思います。
フラグの管理がなんだか面倒になってる理由ですが、アニメーションの開始終了イベントとかをAIで受けて、フラグを反映させる方法として、これとブラックボードの値を直接AI側から変える方法を思いついたのですが、個人的に初期化以外でブラックボードの値をビヘイビアツリーからいじりたくなかったのでこうなりました。
セレクターの下にいきます。こっちは次の行動を決めたり攻撃モーションへの移行を示してます。
左側から行きましょう。こちらは次の行動を決めるツリーなため、isNextActが真のときにのみ実行します。
BTTask_GetLengthToTarget
プレイヤーとの距離をブラックボードのLength変数に設定しています
BTTask_SetNextAct
次の行動を決めています。攻撃前には一回しか決める必要がないため、次の行動が決まったらAIコントローラのisNextActにfalseを入れています。
これで、攻撃が終わるまでは実行されなくなります。
行動の振り分けですが、遠距離攻撃と近距離攻撃で分けています。距離に関しては未調整ですが、とりあえず400以下なら近距離攻撃、それより大きければ遠距離攻撃となってます。
攻撃側のツリーに移りましょう。といってもこっちはほとんど中身が同じなので、説明事項はほとんどないです。下手したらタスクを別々に作る必要ないです。試す時間が(遊んでたせいで)なかったので、平日のうちの課題としておきます。
こちらのツリーは攻撃可能を表すフラグが立っていたら実行します。
BTTask_LookAtPlayer
確か前にも説明しましたが、プレイヤーのほうにRotationを向けるだけです。
先程のisNextActで設定したボスの次の行動に応じて攻撃アニメーションを実行させるタスクに移ります。
攻撃系のタスク
AIコントローラにある、指定した状態のアニメーションを実行する関数を呼んでいるだけです。それぞれ与えてる引数が違うだけです。これ多分タスク統一できるので後で直します。
時間がやばいので細かい説明は明日の記事に回します。後半になって息切れ気味になって本当に申し訳ないです・・・。