1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数のObservableStateMachineTriggerの順番を知りたい時の小技

Posted at

#動機
UniRXのObservableStateMachineTriggerが便利だったので何個も使っていたのですが、困ったことがありました。
以下のようなAnimatorからGetBehavioursした時に、どれがどのStateのものか分からなくなってしまったのです。
image.png

具体的には

ObservableStateMachineTrigger[] triggers;
animator = GetComponent<Animator>();
triggers = animator.GetBehaviours<ObservableStateMachineTrigger>();

//State1
triggers[0].OnStateEnterAsObservable()
            .Subscribe(_ =>
            {
                //State1の処理
            })
            .AddTo(this);

//State2
triggers[1].OnStateEnterAsObservable()
            .Subscribe(_ =>
            {
                //State2の処理
            })
            .AddTo(this);

こんなコードがあったとして、State1がtriggers[0]とtriggers[1]のどっちに対応するのかわからないという状況です。
2個くらいなら間違っても入れ替えれば済むのですが、数が増えると大変ですね...

#力技で解決
多分正しいやり方ではないのですが、とりあえずなんとかなる方法を見つけました。

AnimatorController animatorController;
ChildAnimatorState[] states;
        
        states = animatorController.layers[0].stateMachine.states;
        for (int i = 0; i < states.Length; i++)
        {
            Debug.Log(states[i].state.name);
        }

image.png

こんなコードを実行するとDebug.LogにStateの名前が全部出てきます。
この中でObservableStateMachineTriggerがついている物を数えて行けばどのStateがtriggerいくつなのか分かります。

おそらくもっといい方法があると思いますが、とりあえずこれでなんとかなったので書いておきます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?