敵AIを作っていたのですが
- WaitTaskが実行されているため
敵がプレイヤーを見つけているのに止まっている
- 敵に攻撃されたのに何も反応せず止まっている
この2つのことに悩まされました。
これは行っているTaskを中断することで解決しました。
Taskを中断するにはObserver Abortsを使用します。
この敵AIのBehavior Treeは
プレイヤーを見つけていない
(BlackBoardの変数にPlayerActorがセットされていない)
場合一定範囲をランダムに移動する
プレイヤーを見つけたら近づいて攻撃をするといったものです。
今困っているのは
「プレイヤーを見つけた時に
プレイヤーを見つけていない時の処理が行われ続ける」
ことなので
「プレイヤーを見つけた時に見つけていない時の処理を中断する」
ようにします。
行う方法はDecoratorのFlow Control、
Observer AbortをSelfにします。
これにより、PlayerActorがBlackBoradの変数にSetされたら
処理が中断されるようになります。
これでWaitTask中にプレイヤーを見つけても
動くようになりました。
攻撃をしても何も反応しない問題は
攻撃が当たったらBlackBoardの値をセットすることで
改善されました。
参考
リンク