Page 1 of 1

開始ステートに戻るタイミングについての質問

Posted: 2021/05/30 03:10
by sugkaz
お世話になっております。
初歩的なことで恐縮なのですが、ArborFSMのステートに関して疑問があります。


ArborFSMコンポーネントをつけたGameObjectを非アクティブ化しても、FSMの遷移は開始ステートに戻らない(リセットされない)ようですが、これは仕様という認識で良いでしょうか?

また、強制的に開始ステートまで戻すには、トリガートランジションを使用するのがパッと思いつきますが、他にも方法はあったりするでしょうか?


PlaymakerではGameObjectの非アクティブ化で遷移がリセットされて開始ステートまで戻るので、Arborの仕様なのか、それとも私の使い方が間違っているのか、ハッキリさせた方が良いかなと思い、質問させていただきます。

お手すきの際にでもご確認いただけますと幸いです。

Re: 開始ステートに戻るタイミングについての質問

Posted: 2021/05/30 06:28
by caitsithware
ご利用ありがとうございます。

GameObjectのアクティブ状態とFSMの再生状態についてですね。

まず、GameObjectやArborFSMコンポーネントを非アクティブにした場合、FSM内の再生状態は一時停止扱いとなり仕様です。
再びアクティブに戻すと非アクティブにする直前の状態から再開されます。

開始ステートに戻したい場合は以下の方法があります。
  • Stopメソッド
    再生停止します。
    再生を再び開始したい場合はPlayメソッドを呼び出してください。
    またスクリプトからの呼び出しの他、組み込み挙動のPlay/Stopもありますので他のFSMからもPlay/Stopが可能です。 グラフの再生/停止をする場合は、基本的にはPlay/Stopの使用を推奨いたします。
  • BackToStartState
    自身のFSMの開始ステートに遷移します。
    StateLinkの接続が不要な代わりに接続線はグラフに表示されません。
    また、いつ開始ステートに戻したいか自身のグラフ内で完結しない場合は、結局のところ下記の常駐ステート+TriggerTransitionのような処理も必要になります。
  • TriggerTransition
    特定文字列を受け取った場合に遷移します。
    例えば常駐ステートにTriggerTransitionを追加し接続先を開始ステートに設定、FSM外からSendTriggerを呼び出せば開始ステートに戻せます。
    こちらはおっしゃる通りの方法ですね。
いずれもParameterContainerの値は開始時の状態に戻らないため、パラメータも戻したい場合は必要に応じて初期化や終了処理を入れ込む必要がありますのでその点はご注意ください。

Re: 開始ステートに戻るタイミングについての質問

Posted: 2021/05/31 08:35
by sugkaz
ご返信ありがとうございます!

細かく説明していただき、大変ありがたいです。
特にPlay/Stopの説明は参考になりました。

疑問点が解消しましたので、心置きなくArborで開発を続けられそうです。