#動機
UniRXのObservableStateMachineTriggerが便利だったので何個も使っていたのですが、困ったことがありました。
以下のようなAnimatorからGetBehavioursした時に、どれがどのStateのものか分からなくなってしまったのです。
具体的には
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);
}
こんなコードを実行するとDebug.LogにStateの名前が全部出てきます。
この中でObservableStateMachineTriggerがついている物を数えて行けばどのStateがtriggerいくつなのか分かります。
おそらくもっといい方法があると思いますが、とりあえずこれでなんとかなったので書いておきます。