いつもお世話になっております。
現在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にしても挙動が変わりませんでした。
SubStateMachineの戻りのリンクを拡張したい
Forum rules
The items required for the request are as follows.
要望に必要な項目は以下の通りです。
The items required for the request are as follows.
- What are you trying to do with Arbor?
- Specifically, where are you inconvenient and in trouble?
- What should I do to improve?
- We can not answer requests that do not know the detailed situation.
- We can not answer your request for specific problems in the specification of your project.
- We can not answer your request on Unity's specification issues.
- We do not guarantee the implementation of your request.
要望に必要な項目は以下の通りです。
- Arborを使って何をしようとしているか。
- 具体的にどこが不便で困っているか。
- 改善するにはどうすればよいか。
- 詳しい状況がわからない要望については答えられません。
- ユーザー様のプロジェクトの仕様上の固有の問題に対する要望については答えられません。
- Unityの仕様上の問題に対する要望には答えられません。
- 要望の実装を必ずお約束するものではございません。
SubStateMachineの戻りのリンクを拡張したい
- Attachments
-
- SubTriggerTest.jpg (238.75 KiB) Viewed 10667 times
-
- TriggerTest.jpg (370.52 KiB) Viewed 10667 times
- caitsithware
- 管理人
- Posts: 495
- Joined: 2015/08/17 12:41
Re: SubStateMachineの戻りのリンクを拡張したい
ご要望ありがとうございます。
SubStateMachine内の処理結果によって親グラフ側をより柔軟に分岐させたい、ということですね。
でしたら、以下のような形で子から親に値を受け渡しできますので、渡された値を元に分岐するのが良いかと思います。
親グラフ側:受け取ったButtonパラメータ(int)を出力し、遷移先で値を比較して分岐。
また、EndStateMachineにSuccessとFailureしかない理由としましては、BehaviourTreeの子グラフとしてFSMを使用している場合、アクションノードの成否にも使用するためとなっています。
親もFSM前提の組み込みスクリプトも用意するとなると逆に混乱のもとにもなりそうです。
パラメータによる値の受け渡しもできますので、SubStateMachine/EndStateMachineの拡張については対応見送りにさせていただきたいです。
SendTriggerを常駐ステートに送らない機能については、特に問題なく対応できそうですので検討いたします。
SubStateMachine内の処理結果によって親グラフ側をより柔軟に分岐させたい、ということですね。
でしたら、以下のような形で子から親に値を受け渡しできますので、渡された値を元に分岐するのが良いかと思います。
- 子グラフに出力可能なパラメータを追加。
- EndStateMachineが行われる前までにCalcParameter等で値を設定。
- 親グラフ側のSubStateMachineで追加したパラメータを引数リストに追加。
- パラメータをデータフローに出力し、SubStateMachineからの遷移先で判定して分岐。
親グラフ側:受け取ったButtonパラメータ(int)を出力し、遷移先で値を比較して分岐。
また、EndStateMachineにSuccessとFailureしかない理由としましては、BehaviourTreeの子グラフとしてFSMを使用している場合、アクションノードの成否にも使用するためとなっています。
親もFSM前提の組み込みスクリプトも用意するとなると逆に混乱のもとにもなりそうです。
パラメータによる値の受け渡しもできますので、SubStateMachine/EndStateMachineの拡張については対応見送りにさせていただきたいです。
SendTriggerを常駐ステートに送らない機能については、特に問題なく対応できそうですので検討いたします。
Re: SubStateMachineの戻りのリンクを拡張したい
ご検討ありがとうございます。
パラメータを介した分岐方法を丁寧に教えていただき助かります。
これが使えるときには使いたいと思います。
ただ、見た目のわかりやすさという点で同じノードで分岐したいので、常駐ステートに通知されないSendTriggerにも期待したいと思います。
ありがとうございました。
パラメータを介した分岐方法を丁寧に教えていただき助かります。
これが使えるときには使いたいと思います。
ただ、見た目のわかりやすさという点で同じノードで分岐したいので、常駐ステートに通知されないSendTriggerにも期待したいと思います。
ありがとうございました。