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 - Create の Animation Controller は Animator、Animation は AnimationClip という名前になってると混乱せずに済むと思うのですが、どうなんでしょう。