UE5/UE4 ビヘイビアツリー(Behavior Tree)の中で異なるビヘイビアツリー(Behavior Tree)アセットを動的に指定してサブツリー(Subtree)として実行する(Run Behavior Dynamic、Set Dynamic Subtree、AI Controller、Behavior Tree Component、Brain Component、Injection Tag、Run Behavior Tree)
公式ドキュメントはこちら。
・Behavior Tree ノードのリファレンス:タスク
https://docs.unrealengine.com/4.27/ja/InteractiveExperiences/ArtificialIntelligence/BehaviorTrees/BehaviorTreeNodeReference/BehaviorTreeNodeReferenceTasks/
・ビヘイビアツリーの概要(Behavior Tree Overview)
https://docs.unrealengine.com/4.27/ja/InteractiveExperiences/ArtificialIntelligence/BehaviorTrees/BehaviorTreesOverview/
・ビヘイビアツリーのクイックスタートガイド
https://docs.unrealengine.com/5.0/ja/behavior-tree-in-unreal-engine---quick-start-guide/
ビヘイビアツリー(Behavior Tree)の中で異なるビヘイビアツリー(Behavior Tree)アセットを動的に実行するには
「Run Behavior Dynamic」ノードを使います。

実行スタックでサブツリーをプッシュするには、Run Behavior Dynamic タスクを使用します。
実行時にサブツリー アセットを割り当てるには、
Behavior Tree コンポーネント**上の SetDynamicSubtree** 関数を使用します。
「Run Behavior」ノードとは異なり、動的に中身を変更するので少し設定が必要になります。
まずは「詳細」にある「Injection Tag」に「Gameplay Tag」を指定します。

「Default Behavior Asset」は動的に指定しない場合に実行されるビヘイビアツリーになります。
なので、必ず動的に指定する場合は指定してもしなくても問題ないと思います。
次にBP側でビヘイビアツリーを動的に指定します。
「AI Controller」のBPで「Set Dynamic Subtree」ノードを使って指定します。

「Target」には「Behavior Tree Component」を指定します。
「Inject Tag」にはビヘイビアツリーの方で指定した動的に差し替えたい「Injection Tag(Gameplay Tag)」を指定します。
「Behavior Asset」には動的に差し替えたいビヘイビアツリーを指定します。
実際にはこんな感じの流れになります。

まず「Run Behavior Tree」でビヘイビアツリーを実行します。
次に「Brain Component」を「Behavior Tree Component」に「Cast」して「Set Dynamic Subtree」ノードを実行します。
「Inject Tag」にはビヘイビアツリーの「Run Behavior Dynamic」で指定したものと同じ「Gameplay Tag」を指定します。
これで動的にビヘイビアツリーが切り替わって実行されると思います。
ビヘイビアツリー側の設定はこんな感じになります。

「Run Behavior Dynamic」にはまだ何も設定していない状態です。
このノードに「Injection Tag(Gameplay Tag)」を設定してあげます。
するとこんな感じで「Injection Tag(Gameplay Tag)」が設定され、
動的に他のビヘイビアツリーアセットがサブツリーとして実行される状態になります。

設定した「Injection Tag(Gameplay Tag)」がノードに表示されるようになりました。
ちなみにこの「Run Behavior Dynamic」ノードによるサブツリーの実行ですが、
実行するビヘイビアツリーの「Root」ノードの直下にデコレーターが設定されていると正常に動作しないようです。

こんな警告のようなメッセージがでます。
ここらへんの挙動は「Run Behavior」と同じ処理になるので詳しくはこちらを見てもらえればと思います。
・ビヘイビアツリー(Behavior Tree)の中で異なるビヘイビアツリー(Behavior Tree)アセットをサブツリー(Subtree)として実行する(Run Behavior)
http://kagring.blog.fc2.com/blog-entry-867.html
「Run Behavior Dynamic」についてはこちらも参考になると思います。
異なる敵に共通ツリーを割り当てて、サブツリーだけ敵ごとに切り替える方法。
— じゃっくぽっと (@JackpotDevelop) July 16, 2021
RunBehaviorDynamic タスクノードを使うとBPからサブツリーを指定できる。#UE4Study
▼ロジック参考 UE4festのスライドhttps://t.co/mFhz8C17AA
▼AnswerHUB - RunBehaviorDynamichttps://t.co/LkLAkIosQ0 pic.twitter.com/FKhyV1FSpv
動的にビヘイビアツリーを切り替えることで、ビヘイビアツリーの共通部分などを一つにして実行できるので
この機能はどんどん使っていくのがいいのかなと思います。
| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑