single.php

UEのビヘイビアツリーを簡単に説明してみる(その2)

Unreal Engine 5で開発する過程で、ビヘイビアツリー(Behavior Tree)を使ってキャラクターの移動に挑戦してみました。仕組みが遠回りすぎたので個人的な理解を備忘録的に投稿します。今回で2回目です。

ビヘイビアツリーの仕組み

Unreal Engineのキャラクターを移動させる場合に、ビヘイビアツリーを使ってAIを使う仕組みがあります。

以前は、Tickイベントなどでフレーム単位でプレイヤーに近づいていくノードを組み合わせて移動させていましたが、ビヘイビアツリーだと自然にプレイヤーを追いかける挙動が再現できます。

いざ使ってみると、新しいキーワードや設定が多すぎて訳が分からなくなりましたが、基本的な動作が理解できてくると敵キャラの挙動に幅が生まれます。

まず、ビヘイビアツリーの仕組みを実際の敵キャラの動きに例えると、こんな感じになります。

端的に説明すると、ツリーと言う名前が付いているので、矢印で枝に分かれてキャラクターの動作を切り替える仕組みです。

ビヘイビアツリーの説明に興味がある方は、別記事から読んでみてください。

ビヘイビアツリーの順序

UnrealEngineで、私が難解だったのはビヘイビアツリーの各ノードが実行される順序です。

これが、私が初めて作ったビヘイビアツリーのノードです。

実行後に[ROOT]から[Selector]に向かう矢印なのは分かります。

その後に、どのノードに移るのかという疑問がありました。イベントグラフの実行ピンとは違い1つのノードから複数のノードに接続できるので順序が気になります。

初見では分かりずらいですが、ビヘイビアツリーのノードの右上に順番が表示されています。普段はグレー表示ですがマウスカーソルを近づけると赤色になります。

上から下、左から右がルールになっているので先に処理がしたい場合ノードは左側に移動します。

注意したいのは、下の同じ層に複数ある場合には、下層には向かわずに右側のノードに処理が移ります。(下のイメージの場合[5]の処理後に[BTTask_Attack]ノードには処理は移動しません)

ビヘイビアツリーサービスは監視役

ツリーのノードには[サービスを追加]メニューで別で作成したビヘイビアツリーサービスを追加します。

追加したサービス内のイベントグラフで組んだノード処理を一定間隔で繰り返します。

また、繰り返す感覚は[詳細]画面の[サービス|Interval]で指定が可能です。

デコレーターは評価役

ノードの[デコレーターの追加]で[Blackboard]などを指定してノードを変化させるための条件を評価します。

様々な評価の基準が組めますが、一般的なのは[ブラックボード]で指定したキーの状態(数値以上、数値未満など)を[Key Query]と[Key Value]で判断します。

サービスからブラックボードのキー操作

[ビヘイビアツリーサービス]のイベントグラフから[ブラックボード]内の[キー]にアクセスするには[Set Blackboard Value as …]ノードを使います。

通常のイベントグラフのように[Get Blackboard Key]などのノードが用意されていません。

キーの値の設定と取得は[Make Blackboard Key Selector]ノードの[Selected Key Name]で名前を指定してキーを取得して[Set Backboard Value as …]と[Get Backboard Value as …]で行います。

こんな感じで、自分がビヘイビアツリーでキャラクターの行動を制御する際に疑問に感じたことを書いてみました。

初見は、かなり難解な手順なのですがしかし、作ってしまうとイベントグラフでノードを組み合わせてキャラクターの動作を作るよりも遥かに自然なキャラクターの行動ができあがります。

まとめ

今回は、Unreal Engine 5で開発する過程で、ビヘイビアツリー(Behavior Tree)を使ってキャラクターを移動する仕組みについて個人的な理解を書きました。

今回はビヘイビアツリーの処理される順序や、サービスやデコレーターの役割について説明をしてみました。

Unreal Engine でビヘイビアツリー(Behavior Tree)を使ってキャラクターを移動したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です