fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

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)の中で異なるビヘイビアツリー(Behavior Tree)アセットを動的に指定してサブツリー(Subtree)として実行する方法です。

公式ドキュメントはこちら。

・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」ノード
を使います。
RunBehaviorDynamic001.jpg

実行スタックでサブツリーをプッシュするには、Run Behavior Dynamic タスクを使用します。
実行時にサブツリー アセットを割り当てるには、
Behavior Tree コンポーネント**上の SetDynamicSubtree** 関数を使用します。


「Run Behavior」ノードとは異なり、動的に中身を変更するので少し設定が必要になります。

まずは「詳細」にある「Injection Tag」に「Gameplay Tag」を指定します。
RunBehaviorDynamic002.jpg
「Default Behavior Asset」は動的に指定しない場合に実行されるビヘイビアツリーになります。
なので、必ず動的に指定する場合は指定してもしなくても問題ないと思います。

次にBP側でビヘイビアツリーを動的に指定します。
「AI Controller」のBPで「Set Dynamic Subtree」ノードを使って指定します。
RunBehaviorDynamic004.jpg
「Target」には「Behavior Tree Component」を指定します。
「Inject Tag」にはビヘイビアツリーの方で指定した動的に差し替えたい「Injection Tag(Gameplay Tag)」を指定します。
「Behavior Asset」には動的に差し替えたいビヘイビアツリーを指定します。

実際にはこんな感じの流れになります。
RunBehaviorDynamic003.jpg
まず「Run Behavior Tree」でビヘイビアツリーを実行します。
次に「Brain Component」を「Behavior Tree Component」に「Cast」して「Set Dynamic Subtree」ノードを実行します。
「Inject Tag」にはビヘイビアツリーの「Run Behavior Dynamic」で指定したものと同じ「Gameplay Tag」を指定します。

これで動的にビヘイビアツリーが切り替わって実行されると思います。

ビヘイビアツリー側の設定はこんな感じになります。
RunBehaviorDynamic000.jpg
「Run Behavior Dynamic」にはまだ何も設定していない状態です。
このノードに「Injection Tag(Gameplay Tag)」を設定してあげます。

するとこんな感じで「Injection Tag(Gameplay Tag)」が設定され、
動的に他のビヘイビアツリーアセットがサブツリーとして実行される状態になります。
RunBehaviorDynamicバッドノウハウ002
設定した「Injection Tag(Gameplay Tag)」がノードに表示されるようになりました。

ちなみにこの「Run Behavior Dynamic」ノードによるサブツリーの実行ですが、
実行するビヘイビアツリーの「Root」ノードの直下にデコレーターが設定されていると正常に動作しないようです。
RunBehaviorDynamic005.jpg
こんな警告のようなメッセージがでます。

ここらへんの挙動は「Run Behavior」と同じ処理になるので詳しくはこちらを見てもらえればと思います。

・ビヘイビアツリー(Behavior Tree)の中で異なるビヘイビアツリー(Behavior Tree)アセットをサブツリー(Subtree)として実行する(Run Behavior)
http://kagring.blog.fc2.com/blog-entry-867.html

「Run Behavior Dynamic」についてはこちらも参考になると思います。

動的にビヘイビアツリーを切り替えることで、ビヘイビアツリーの共通部分などを一つにして実行できるので
この機能はどんどん使っていくのがいいのかなと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/872-afffaed8

TRACKBACK

PREV | PAGE-SELECT | NEXT