BehaviourTree の SubStateMachine + デコレータについて②
Posted: 2018/08/13 03:54
①とは別件のような気がするので二つにわけます
①の方で「デコレータの条件が合っていないときでもSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが1度実行され」という話をしていました。
その打開案として図2を作成しました。
●図2
この図で条件が合っていないときにはSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが呼ばれなくなりました。
ですが、今度はunityがフリーズするときがでるようになりました。
タイミングとしては図2の③のSubStateMachineReferenceの「hello」が実行されているときです。
●図3
主人公が村人に話しかけたときにデコレータの【Hello】がtrueになり、「hello」が実行されます。
「hello」の中(図3)の処理は下記のとおりです。
1、話しかけられた村人の頭上に吹き出しとテキストを表示
2、吹き出しは2秒ほど表示されるので非表示になるまで待機
3、吹き出しがきえたら【Hello】を false にする
「hello」実行中でも主人公は操作でき、話しかけつづける(【Hello】をtrueにする)ことができます。
フリーズするタイミングはシビアなのですが、3の【Hello】をfalseと主人公が話しかけて【Hello】をtrueにするタイミングが重なったときになっているように見えます。
上記の方法だと発生させるのが難しいので、他に発生させる方法がないか試したところ図4の状態で話しかけるとunityがフリーズしました。
●図4
単純にデコレータの条件がtrueになるようにしてSelectorになにもつながないとフリーズするようです。
上記の図3のときと違う原因かもしれませんが、参考になればと思います。
①の方で「デコレータの条件が合っていないときでもSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが1度実行され」という話をしていました。
その打開案として図2を作成しました。
●図2
この図で条件が合っていないときにはSubStateMachineReferenceの開始ステートの挙動のOnStateBeginやOnStateUpdateが呼ばれなくなりました。
ですが、今度はunityがフリーズするときがでるようになりました。
タイミングとしては図2の③のSubStateMachineReferenceの「hello」が実行されているときです。
●図3
主人公が村人に話しかけたときにデコレータの【Hello】がtrueになり、「hello」が実行されます。
「hello」の中(図3)の処理は下記のとおりです。
1、話しかけられた村人の頭上に吹き出しとテキストを表示
2、吹き出しは2秒ほど表示されるので非表示になるまで待機
3、吹き出しがきえたら【Hello】を false にする
「hello」実行中でも主人公は操作でき、話しかけつづける(【Hello】をtrueにする)ことができます。
フリーズするタイミングはシビアなのですが、3の【Hello】をfalseと主人公が話しかけて【Hello】をtrueにするタイミングが重なったときになっているように見えます。
上記の方法だと発生させるのが難しいので、他に発生させる方法がないか試したところ図4の状態で話しかけるとunityがフリーズしました。
●図4
単純にデコレータの条件がtrueになるようにしてSelectorになにもつながないとフリーズするようです。
上記の図3のときと違う原因かもしれませんが、参考になればと思います。