ご質問ありがとうございます。
現在の仕様についてですが、ノードのアクティブ化と処理の流れは以下の通りとなっています。
- ノードがアクティブになる
このタイミングで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)を使用するようにお願いいたします。