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 »

①とは別件のような気がするので二つにわけます

①の方で「デコレータの条件が合っていないときでもSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが1度実行され」という話をしていました。
その打開案として図2を作成しました。
●図2
Image
この図で条件が合っていないときにはSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが呼ばれなくなりました。
ですが、今度はunityがフリーズするときがでるようになりました。
タイミングとしては図2の③のSubStateMachineReferenceの「hello」が実行されているときです。
●図3
Image
主人公が村人に話しかけたときにデコレータの【Hello】がtrueになり、「hello」が実行されます。
「hello」の中(図3)の処理は下記のとおりです。
1、話しかけられた村人の頭上に吹き出しとテキストを表示
2、吹き出しは2秒ほど表示されるので非表示になるまで待機
3、吹き出しがきえたら【Hello】を false にする
「hello」実行中でも主人公は操作でき、話しかけつづける(【Hello】をtrueにする)ことができます。
フリーズするタイミングはシビアなのですが、3の【Hello】をfalseと主人公が話しかけて【Hello】をtrueにするタイミングが重なったときになっているように見えます。

上記の方法だと発生させるのが難しいので、他に発生させる方法がないか試したところ図4の状態で話しかけるとunityがフリーズしました。
●図4
Image
単純にデコレータの条件がtrueになるようにしてSelectorになにもつながないとフリーズするようです。
上記の図3のときと違う原因かもしれませんが、参考になればと思います。
User avatar
caitsithware
管理人
Posts: 493
Joined: 2015/08/17 12:41

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

Post by caitsithware »

質問内容としては、そのグラフをフリーズしないようにする方法についてでしょうか?

申し訳ありませんが、自作されているグラフの内容についてはプロジェクトを丸ごと見せていただかないと正確なサポートもできないため、基本的には自力での解決をお願いいたします。
(Arbor外スクリプトとのタイミングの問題などもあるかと思いますので)

図4については、条件合致後アクションがないので即失敗を返してノード③へ行くも割り込み条件が合致したままなため再度ノード②に戻るのを繰り返しているのかと思います。
Priorityが自分よりも低い場合に割り込むデコレータ、失敗を返した場合に次のノードを実行するSelector、アクションがないので失敗を返さざるを得ない状況、ということで仕様となります。

BehaviourTreeは1フレーム内でも条件が合致する限り何度でも割り込み判定を行う構造となっていますので、何度も実行されてフリーズされるような場合は条件を見直すようにお願いします。
kudou

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

Post by kudou »

ご返答ありがとうございます。
質問内容としては、そのグラフをフリーズしないようにする方法についてでしょうか?

申し訳ありませんが、自作されているグラフの内容についてはプロジェクトを丸ごと見せていただかないと正確なサポートもできないため、基本的には自力での解決をお願いいたします。
(Arbor外スクリプトとのタイミングの問題などもあるかと思いますので)
今まで使用していてunityがフリーズしたことがなかったので気が動転していたのかもしれません。
フリーズすると保存していなかったものが色々とやり直しになるので、なんとか原因をつきとめたくて質問にあげてしまいました。
今回のこの図は調べてもわかりそうになく、また前質問の「FSM側の開始ステートにGoToTransitionを挟む」で不要になったので破棄いたします。

図4の件についても理解いたしました。
このような図にならないように条件に気をつけます。
Post Reply