※追記あり。(2023/8/28)
UnityのAnimatorでアニメーションをいろいろ付けて状態遷移させていると、以下のような警告がConsoleに出ることがあります。
- Animator is not playing a Playable
- Animator does not have an AnimatorController
もちろんGameObjectにAnimatorはAddされているし、AnimatorにAnimatorControllerが設定されています。
いろいろ試したところ、非アクティブなGameObjectに対してAnimator.SetTrigger(SetBool,SetInt,SetFloat等)をしたときに1が、Animator.Playをしたときに2が出るようです。
意味合いとしては、「GameObjectが非アクティブになるとAnimatorはリセットされるし、その間の操作は反映されないので意味ないよ」ということなのでした。(※ちょっと違う。追記(2023/8/28)を参照のこと)
私の場合、Animatorの状態をリセットするためにPlayやSetTriggerを呼び、いったん非表示にするためにSetActiveで非アクティブにしていたので、この警告が出ていました。前述のとおり、非アクティブにするとAnimatorはリセットされるので、必要のない処理だったということになります。消そ。
※Unity 5.5.1f1で確認。
追記 (2023/8/28)
再び同じ警告が出て検索したら、6年前に自分が書いたこの記事がトップに表示されて、いろんな意味でがっかりしました…。(全然覚えていない上にちょっと違う)
さて、
Animator does not have an AnimatorController
についてなんですが、単純に、
AnimatorControllerが設定されていないAnimatorコンポーネントから、AnimatorControllerが持つ情報に間接的にアクセスしようとしたときに出る
ようです。例えば、Animator.parametersの中身はAnimatorControllerにあるので、parametersにアクセスすると警告が出ます。未設定なんてことある??と思ったけど、誰かがnullに設定してた…。(アニメーションしないという意味?)
ただ、それだけではなく、意図せずAnimatorControllerが未設定になることがあるようで、Animatorを持つGameObjectを非アクティブにすると、内部でnullにしてしまうようです。SetActive(true)にすると元に戻るんですが、Unityは各コンポーネントの実際の処理はGameObjectのあとに行われるので、アクティブに戻してすぐアクセスすると、まだnullなので警告が出るんじゃないかと思われます。
実害はないっちゃないんですが(エラーではない)、意図せずAnimatorControllerをnullにしていないかどうかは確認するといいかもしれません。
※Unity 2021.3.24f1で確認。