Arbor 3.4.2
添付のようなビヘイビアツリーを作成しました。
前進しつづけ、崖か壁にぶつかると折り返すような処理を意図しています。
このとき、主要なメソッドの実行順が以下のようになります。
FrameCount=2~40の挙動は理解できます。ツリーを優先度順に辿るとこのような順番になるかと思います。
FrameCount=41において崖判定(IsOnEdge)が真になり、折り返すアクション(GazeBackward)を
実行したものの無限ループに陥りました。
アクション(GazeBackward)内でFinishExecute(true)を実行しているにもかかわらず
ツリー上部へ戻ってServiceが実行されることなく、再度CalculatorCheckが実行されてしまうのは仕様でしょうか?
これによって無限ループが生じていると思われますが、想定する運用と異なるのでしょうか?
(Serviceでパラメータを更新し、Decoratorでそれをもとに判断する)
-----------------------------------------------
FrameCount,ClassName,MethodName
1,CalculatorCheck,OnConditionCheck
1,CalculatorCheck,OnConditionCheck
1,CalculatorCheck,OnConditionCheck //Decoratorが複数回呼ばれ、Serviceは呼ばれない
1,MoveForward,OnExecute
2,EdgeSensor,OnUpdate
2,WallSensor,OnUpdate
2,CalculatorCheck,OnConditionCheck
2,MoveForward,OnExecute
(繰り返しのため中略)
40,EdgeSensor,OnUpdate
40,WallSensor,OnUpdate
40,CalculatorCheck,OnConditionCheck
40,MoveForward,OnExecute
41,EdgeSensor,OnUpdate //ここで崖判定が真になった
41,WallSensor,OnUpdate
41,CalculatorCheck,OnConditionCheck
41,CalculatorCheck,OnConditionCheck //なぜか2回呼ばれる
41,GazeBackward,OnExecute
41,CalculatorCheck,OnConditionCheck //Serviceに戻らず、Decoratorが呼ばれる(今回の質問)
41,CalculatorCheck,OnConditionCheck
41,GazeBackward,OnExecute
(以下、無限ループしてしまう)
-----------------------------------------------
以上、よろしくお願いいたします。
