BehaviourTree の SubStateMachine + デコレータについて

Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。

Forum rules
Here is the forum to do the questions about how to use to Arbor developer.
Attention point:
  • We can not answer your questions about your project specific issues.
  • We can not answer your questions on Unity's specification issues.
  • Please check Arbor Documentation and ask a question if you still don't know how to use it. If the desired function is not described in the document, it is highly possible that the function does not exist from the beginning, so go to the request forum.

ここは、Arbor開発者へ使い方に関する質問を行うフォーラムです。
注意点:
  • ユーザー様のプロジェクトの仕様上の問題や設計に対する質問には答えられません。
  • Unityの仕様上の問題に対する質問には答えられません。
  • Arbor Documentationを確認の上、それでも使い方がわからない場合にご質問ください。欲しい機能の記載がドキュメントにない場合は機能が元から存在しない可能性が高いので要望フォーラムへ。
kudou

BehaviourTree の SubStateMachine + デコレータについて

Post by kudou »

unity 2018 1.0 f2
arbor3.1.3

図1のような BehaviourTree を作成しました。
●図1
Image
②、③のデコレータの条件が合わなかった場合に④が実行されます。
このときに②、③の条件があっていないときにでもSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが1度実行されてから④が実行されているようでした。
私としてはデコレータの条件が合わないときはSubStateMachineReferenceの中の挙動は実行されずにいて欲しいのですが、上記の挙動は仕様でしょうか?
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

Re: BehaviourTree の SubStateMachine + デコレータについて

Post by caitsithware »

ご質問ありがとうございます。

現在の仕様についてですが、ノードのアクティブ化と処理の流れは以下の通りとなっています。
  • ノードがアクティブになる
    このタイミングでActionBehaviourやDecorator、ServiceのOnAwakeとOnStartが呼び出される。
    SubStateMachine関連では、このOnStartのタイミングでPlay開始しているため、必ず子グラフが実行開始されるようになっている。
  • 割り込み判定を行う。
  • 実行可能かのデコレータ判定を行う(アクティブ化後の1回のみ)。
  • 条件に合致するならOnExecuteを呼び出す。
まず、なぜアクティブの時に必ずOnStartを呼ぶようになっているかというと、TimeLimitやCooldownデコレータのように通過次第タイマーを開始したいケースなどがあるためです。
LowerPriorityによる割り込み判定のためにも「一度アクティブになり通過した」状態は必要かと考えています。
スクリプトが自由に記述できるのもあり、どういったケースで呼び出して欲しいか必要ないかがArbor本体側では判断できないため、現状は一律で呼び出すようになっています。

ですが、この問題点もわかりますので、今後の更新で何かしらの対応をしたいと思います。
それまでの間、条件判定をFSMで行うか、FSM側の開始ステートにGoToTransitionを挟むなどで処理を一瞬遅らせるなどしてください。

また、OnStateUpdateについてはログ出力をして確認してみましたが、条件が合致しないアクション側のOnStateUpdateは呼び出されていないようでした。
もし呼び出されているようでしたら不具合ですので詳細を不具合報告フォーラムへお願いいたします。

ご不便おかけして申し訳ありませんがよろしくお願いいたします。

追記:
arbor3.1.3
これは勝手なお願いなのですが、
バージョンの違いに細かくサポートするのも難しいので、もしよろしければArbor最新版(3.2.3)を使用するようにお願いいたします。
kudou

Re: BehaviourTree の SubStateMachine + デコレータについて

Post by kudou »

ご返答ありがとうございます。

ノードのアクティブ化と処理の流れの件、了解いたしました。
また対応策も「FSM側の開始ステートにGoToTransitionを挟む」ことで思ったとおりの動作ができました。
また、OnStateUpdateについてはログ出力をして確認してみましたが、条件が合致しないアクション側のOnStateUpdateは呼び出されていないようでした。
もし呼び出されているようでしたら不具合ですので詳細を不具合報告フォーラムへお願いいたします。
こちらは呼び出されていないようでした。
OnStateAwakeやOnStateBeginなどと一緒にチェックしていたときに勘違いしたのかもしれません。
本当にすみません。

3.1.3は3.2.3の書き間違えでした。
本当にすみません。

ミスが多く、本当にすみません。
気をつけます。
Post Reply