Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

【UE5】Behavior Treeで割り込み処理を行う方法

敵AIを作っていたのですが

  • WaitTaskが実行されているため
    敵がプレイヤーを見つけているのに止まっている
  • 敵に攻撃されたのに何も反応せず止まっている

この2つのことに悩まされました。
これは行っているTaskを中断することで解決しました。

Taskを中断するにはObserver Abortsを使用します。

この敵AIのBehavior Treeは
プレイヤーを見つけていない
(BlackBoardの変数にPlayerActorがセットされていない)
場合一定範囲をランダムに移動する

プレイヤーを見つけたら近づいて攻撃をするといったものです。

今困っているのは 「プレイヤーを見つけた時に
プレイヤーを見つけていない時の処理が行われ続ける」
ことなので
「プレイヤーを見つけた時に見つけていない時の処理を中断する」
ようにします。

行う方法はDecoratorのFlow Control、
Observer AbortをSelfにします。

これにより、PlayerActorがBlackBoradの変数にSetされたら
処理が中断されるようになります。

これでWaitTask中にプレイヤーを見つけても
動くようになりました。

攻撃をしても何も反応しない問題は
攻撃が当たったらBlackBoardの値をセットすることで
改善されました。

参考

How to implement interrupts in a behavior tree - #4 by Asher_S_Einhorn - AI - Epic Developer Community Forums