Page 1 of 1

SubStateMachineの戻りのリンクを拡張したい

Posted: 2019/11/07 01:57
by kag
いつもお世話になっております。

現在SubStateMachineの戻りのリンクがSuccessとFailureしかないため、
TriggerTransitionを使ってみました。
TriggerTransitionを使用すればParentGraphで分岐できなくはないのですが、常駐ステートに同名のMessageを持つTriggerTransitionがあるとそちらが優先されてしまい、SubStateMachineを呼んでいるNodeにあるTriggerTransitionのTransition TimingをLate Update Overwriteにしないと
意図したとおりに動きませんでした。
※現実的には同名のMessage名を設定することはほぼないのですが、複数人で作っていると被ることはあり得るので…。

そこで、EndStateMachineのように専用のStateで、呼び出したNodeにしか届かないSendTriggerのような機能を標準で用意して頂けると助かります。
もしくは、SubStateMachineのリンクを拡張できてそれを子から疎結合的に呼び出せる(結局は名前文字列になるのでしょうが)ような仕組みであれば、よりスッキリすると思います。

ご検討のほど、よろしくお願いいたします。

添付ファイル
TriggerTest.jpg
・親FSMです。
SubStateノードのTriggerTransitionのTransition TimingをLate Update OverwriteにするとTest1に、 Late Update Dont OverwriteにするとTest2に遷移します。

SubTriggerTest.jpg
・子FSMです。
SendTriigerをSelfにしてもRootGraphにしても挙動が変わりませんでした。

Re: SubStateMachineの戻りのリンクを拡張したい

Posted: 2019/11/07 02:38
by caitsithware
ご要望ありがとうございます。

SubStateMachine内の処理結果によって親グラフ側をより柔軟に分岐させたい、ということですね。
でしたら、以下のような形で子から親に値を受け渡しできますので、渡された値を元に分岐するのが良いかと思います。
  • 子グラフに出力可能なパラメータを追加。
  • EndStateMachineが行われる前までにCalcParameter等で値を設定。
  • 親グラフ側のSubStateMachineで追加したパラメータを引数リストに追加。
  • パラメータをデータフローに出力し、SubStateMachineからの遷移先で判定して分岐。
子グラフ側:押したボタン別にButtonパラメータ(int)に値を設定しEndStateMachine。
ChildGraph.png
ChildGraph.png (175.89 KiB) Viewed 10703 times
親グラフ側:受け取ったButtonパラメータ(int)を出力し、遷移先で値を比較して分岐。
ParentGraph.png
ParentGraph.png (124.72 KiB) Viewed 10703 times
また、EndStateMachineにSuccessとFailureしかない理由としましては、BehaviourTreeの子グラフとしてFSMを使用している場合、アクションノードの成否にも使用するためとなっています。
親もFSM前提の組み込みスクリプトも用意するとなると逆に混乱のもとにもなりそうです。
パラメータによる値の受け渡しもできますので、SubStateMachine/EndStateMachineの拡張については対応見送りにさせていただきたいです。

SendTriggerを常駐ステートに送らない機能については、特に問題なく対応できそうですので検討いたします。

Re: SubStateMachineの戻りのリンクを拡張したい

Posted: 2019/11/07 03:29
by kag
ご検討ありがとうございます。

パラメータを介した分岐方法を丁寧に教えていただき助かります。
これが使えるときには使いたいと思います。

ただ、見た目のわかりやすさという点で同じノードで分岐したいので、常駐ステートに通知されないSendTriggerにも期待したいと思います。
ありがとうございました。