LoginSignup
6
7

"Animator does not have an AnimatorController"と"Animator is not playing a Playable"

Last updated at Posted at 2017-03-24

※追記あり。(2023/8/28)

UnityのAnimatorでアニメーションをいろいろ付けて状態遷移させていると、以下のような警告がConsoleに出ることがあります。

animator_error.png

  1. Animator is not playing a Playable
  2. 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で確認。

6
7
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
6
7