[unity]Animations をコードで取得できない?

Animations をコードで取得したい

以下のコードで取得できます。

[SerializeField]
Animation anim;

// 個数 (Size) を取得
anim.GetClipCount();

// Animations を取得
foreach (AnimationState state in anim)
{
    Debug.Log(state.name);
}

が、GetClipCount() は取得できるのに、AnimationState が取得できないことがあります。

Legacy にするのを忘れている

これは考えてみれば当たり前ですし、Legacy でない AnimationClip を1に入れようとしても入りませんが、2のサイズを手動で増やし、そちらにドラッグすると AnimationClip が入ってしまう…。

こうなると、GetClipCount() は3なのに、AnimationState が1つしかないといったデータが作れてしまいます。
Console に警告が出ているので、これを見逃さないのは大事です。

Legacy にするには

Animation ではなく SimpleAnimation 使えばいいじゃん! という声も聞こえてきますが、レガシーと言われようと Animation がいいのであれば、Debug メニューに出てくる Legacy にチェックをつけます。

  • Project で AnimationClip を選択
  • Inspector を右クリック → Debug を選択
  • Legacy という項目が見えるようになるので、チェック

Animation で混乱する私

Project のアニメーションファイル(AnimationClip)も、Component のアニメーションも、どちらも Animation という名前になってるんですよね…。

Project – CreateAnimation ControllerAnimatorAnimation AnimationClip という名前になってると混乱せずに済むと思うのですが、どうなんでしょう。