simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity: BehaviorTree 勉強2

アニメーションする Task は Running しか返さないというのはどうか?

止める条件があるのなら、その親に Conditional Evaluator を置き、これが失敗を返したら、子であるアニメーション Task は中断されるため

参考

www.slideshare.net


目的地が設定されているか?
yes→目的地へ向かう
no→次の行動を選択

selector

sequence

  • hasDestination
  • gotoDestination

sequence

  • nextAction

結局アクションを定義してから組み合わせになるのか

ランダムに目的地を決める
プレイヤーを見つけているか?
プレイヤーの方向の目的地を決める
目的地は決まったか?
目的地に向かって歩く
目的地に着いたか?
十分プレイヤーに近づいたか?
プレイヤーの方向を向いているか?
プレイヤーの方向を向く
座り込む
座り続ける
立ち上がる


うーん、一連のながれが sequence で、その一連のながれが通らないときに selector で別の sequence へ流れるかんじ?

最初は
十分プレイヤーに近づいたか?→yes→プレイヤーの方向を向く→十分プレイヤーに近づいたか?→yes→座り込む→十分プレイヤーに近づいたか?→yes→プレイヤーの方向を向いているか?→yes→座り続ける
目的地に着いたか?→yes→
目的地は決まったか?→yes→目的地に向かって歩く
プレイヤーを見つけているか?→yes→プレイヤーの方向の目的地を決める

え、ループできるのか
ループってどうやってツリー表現

考え中

なるほど、継続しつづけるアクション 待機モーションなどを running し続けるで良さそう
これが最終的な安置として

どうやって抜け出すの?

それが前回勉強したなにかの conditional なんちゃら

Selector Evaluator

実行中を返す Action が子タスクの優先度の低いものであったなら、それより高い優先度の Action の評価をもう一度行う

これもそうだけど、もっと self とか low priority とかでもできたような?

Sequence NodeのAbort TypeをNoneからSelfに変更すると、子ノードの running 中の左側を毎回評価して、failure なら runnning を中断できる
つまり、抜け出せる AbortType self で

または、同階層の右側が running でも Abort Type Lower Priority でも

なるほど Abort の目的語が Lower Priority で右がわ、Self が自身の子ノードという意味だったのか

やっと解読できてきた
つまり