はじめに
この記事はHamster Output Advent Calendar 2025の6日目の記事です。
今回はAnimatorでステートが切り替わった時に通知を受け取ることができるR3(UniRx)のObservableStateMachineTriggerを使って情報を受け取れるようにしたいと思います。
R3を利用するのでプラグインのダウンロードが必須です。自分はいつも下の方法でダウンロードしてます。
1.PackageManagerの Add package from git URLから Nugetをダウンロードする
Unity上部のバーからWindow>PackageManagerを選び、PackageManagerのウィンドウが開いたら、左上の+ボタンをクリックして、Add package from git URLを選択して下のURLを入れてダウンロードします
https://github.com/GlitchEnzo/NuGetForUnity.git?path=/src/NuGetForUnity
2.NugetからR3のコアモジュールをダウンロードする
Nugetをダウンロードすると、Unity上部のバーにNugetが出てきます。これを選択してManage Nuget Packagesを押して、開いたウィンドの検索バーにR3を入れて表示されたR3をインストールします
3.1でやったPackageManagerの方法でR3のUnityプラグインをダウンロードする
https://github.com/Cysharp/R3.git?path=src/R3.Unity/Assets/R3.Unity
ダウンロードについては下記の方が詳しく書いてくださっています...!
ステートの切り替わった時の通知を受け取る
1.AnimatorのステートにObservableStateMachineTriggerをアタッチする
Animatorを開いて、表示されているステートを選択します

ステートを選択すると、インスペクターにステートに関する内容が表示されるので、下に表示されているAdd Behaviourを選択してObservableStateMachineTriggerをアタッチします。

2.ObservableStateMachineTriggerのOnStateEnterAsObservableを購読する
下のスクリプトを作って、GameObjectにアタッチします!
using Cysharp.Threading.Tasks;
using R3;
using R3.Triggers;
using UnityEngine;
public class Test : MonoBehaviour
{
[SerializeField]
private Animator _animator;
private void Start()
{
var triggers
= _animator.GetBehaviours<ObservableStateMachineTrigger>();
foreach (var trigger in triggers)
{
var enterState = trigger
.OnStateEnterAsObservable()
.Subscribe(x =>
{
Debug.Log($"OnStateEnter(Each): {x.StateInfo.shortNameHash}");
})
.AddTo(this);
}
}
}
試しにシーンを再生すると、最初のステートのハッシュ値が出てきました!
DodgeにもObservableStateMachineTriggerをアタッチして、Animatorを繋げた状態にして状態で再生すると
問題なく、ステートが切り替わったタイミングでハッシュ値が表示されました!

ObservableStateMachineTriggerにはステート開始時以外にも、Update中や、ステートの終了時に通知を受け取ることもできますので、Animatorのステートを使う方は利用してみてはいかがでしょうか!

