概要
using UnityEngine; [SharedBetweenAnimators] public sealed class Example : StateMachineBehaviour { private int m_counter; // static ではない public override void OnStateEnter ( Animator animator, AnimatorStateInfo stateInfo, int layerIndex ) { // OnStateEnter が呼び出されるたび m_counter をインクリメント Debug.Log( $"呼び出された回数:{++m_counter}" ); } }
上記のように StateMachineBehaviour を継承したクラスに
SharedBetweenAnimatorsAttribute を適用して
Animator Controller を作成して
適当なステートを作成して
先ほど作成した StateMachineBehaviour をアタッチします
そして、シーンに2つのゲームオブジェクトを作成して
その2つのゲームオブジェクトに「Animator」をアタッチして
先ほど作成した Animator Controller を設定して Unity を再生すると
StateMachineBehaviour の static ではない m_counter 変数が
共通で使用されていることが確認できます
SharedBetweenAnimatorsAttribute を消して動作確認してみると
m_counter 変数が共通で使用されなくなったことが確認できます
このように SharedBetweenAnimatorsAttribute を使用すると
別々の Animator で StateMachineBehaviour のインスタンスを共有できるようになります