Page 1 of 1

階層化FSMの実現

Posted: 2017/05/10 02:23
by masakam1
https://www.slideshare.net/Unite2017Tok ... y-75810280
こちらの記事を呼んでarborで階層化FSMをやろうとしました。
しかしtrial版にSubStateらしいものはありませんでした(

現状標準では階層化はサポートされてないのでしょうか?

Re: 階層化FSMの実現

Posted: 2017/05/10 03:20
by caitsithware
masakam1 wrote:https://www.slideshare.net/Unite2017Tok ... y-75810280
こちらの記事を呼んでarborで階層化FSMをやろうとしました。
しかしtrial版にSubStateらしいものはありませんでした(

現状標準では階層化はサポートされてないのでしょうか?
申し訳ありませんが、現状、標準機能として実装されていないため、独自に拡張していただく必要があります。

スライドにあるような実装としましては、
  • SubState用のStateBehaviourスクリプトを作成。
  • SubStateでは、指定したArborFSMのプレハブをパラメータとして持っておき、OnStateBeginの時にInstantiate、子FSMが終了したらTransition。
  • 子FSMでは終了ステートでTriggerを投げるかEndStateなどのStateBehaviourスクリプトを作成して親FSMに終了したことを通知。
といった形で実現できるかと思います。

私も階層化&共通化は重要だと認識しておりますので、今後何らかの形でArbor本体へと組み込みたいと思っております。
標準対応につきましては今しばらくお待ちいただけますようよろしくお願いいたします。

Re: 階層化FSMの実現

Posted: 2017/05/10 04:17
by caitsithware
提案だけではなんですので、ひとまず簡易版を作成いたしました。
ArborSubState.unitypackage
(17.44 KiB) Downloaded 443 times
こちらをダウンロードしてArborを使用しているプロジェクトにインポートしてください。

サンプルは、ArborSubState/Examplesにあります。
Scenes/SubStateシーンは、ボタンを押すと子FSMに移行してコインを出して戻ってくるサンプルとなっています。

使い方
  • 挙動追加から State > SubState を選択してSubStateを追加
  • SubStateのPrefabパラメータに共通で使用したいFSMのプレハブを指定
    ArborSubState.png
    ArborSubState.png (10.71 KiB) Viewed 5384 times
  • 子のFSM側で、挙動追加から State > EndStateを選択してEndStateを追加。
    こちらはとくに設定項目はありません。
    ArborEndState.png
    ArborEndState.png (4 KiB) Viewed 5384 times
注意点
  • 子FSMは子GameObjectとしてInstantiateされます。
    OnCollisionEnterなど、親GameObjectにのみ通知されるメッセージは処理できません。
    位置の指定なども現状できません。
  • 一度Instantiateした子FSMは次回以降でもオブジェクトを使いまわします。
    パラメータなどは初期化されないため、必要に応じてEndState前か開始ステートにて初期化処理を入れる必要があります。

Re: 階層化FSMの実現

Posted: 2018/02/23 06:37
by masakam1
わざわざありがとうございます!:D
これで一気に便利になります、さっそく試してみます