Page 1 of 1

SendTriggerが無視される(?)件に関しての質問

Posted: 2021/06/23 23:22
by sugkaz
お世話になっております。

ArborFSMをセットした非アクティブのゲームオブジェクト(以下A)を、別のスクリプトからアクティブ状態に変更後、すぐにAに対してSendTriggerした場合、トリガーが無視されているようなのですが、これは仕様でしょうか?
スクリプト的には、以下のような感じです。

gameobjectA.SetActive(true);
gameobjectA.GetComponent<ArborFSM>().SendTrigger("trigger");

ArborFSMの初期化中にトリガーを送ってしまって無視されているのかな…と想像しているのですが、そもそもの使い方を間違えている可能性もあるので、一応質問いたします。
また、アクティブ化直後でも正常にトリガーを送れる方法がもしありましたら、ご教示頂けますと幸いです。

Re: SendTriggerが無視される(?)件に関しての質問

Posted: 2021/06/24 00:40
by caitsithware
Arborのご利用ありがとうございます。

アクティブ化された瞬間で再生開始していないArborFSMへのSendTriggerに関しては、以下の条件に合致する場合にのみ一時的にため込み再生開始後にトリガーが送られるようになります。
  1. Arborバージョン3.8.0以降
  2. ArborFSMのisActiveAndEnabledがtrue
    > GameObjectもArborFSMもアクティブである
  3. ArborFSMのplayStateがPlayState.Playing以外
    > 再生していない
  4. ArborFSMのplayOnStartがtrue
    > ArborFSMのStart()のなかで再生開始する
  5. ArborFSMのisStartedがfalse
    > ArborFSMのStart()がまだ呼ばれていない
  6. SendTrigger呼び出しと再生開始が同一フレーム
    > 時間差があるとややこしいため、同一フレームに制限
この機能自体はゲーム開始直後や複数のFSMが同時にアクティブ化された場合の初手SendTrigger/TriggerTransitionを通るようにするための暫定的なものとなっております。
特に「SendTrigger呼び出しと再生開始が同一フレーム」に関しては、Unityの仕様(Start()が呼び出されるのはUpdate()の直前)の関係で1フレーム遅延が入ってしまう場合もありえますので、単一のFSMをアクティブ化した際のSendTriggerが通るかは不定です。

確実にトリガーを送るには再生開始していれば大丈夫です。
例えばSetActive(true)→Play()→SendTrigger("trigger")の順に呼び出すようにしてみてください。

Re: SendTriggerが無視される(?)件に関しての質問

Posted: 2021/06/25 00:54
by Guest
ご返信ありがとうございます。

>確実にトリガーを送るには再生開始していれば大丈夫です。
>例えばSetActive(true)→Play()→SendTrigger("trigger")の順に呼び出すようにしてみてください。

こちらの方法で、問題なくトリガーを送れるようになりました。
素早いご対応、ありがとうございました!