AnimationClipをAnimatorControllerの作成なしに3Dモデルに適用して再生したいという要件を満たすために実装してたときの話。
以下のような感じでAnimationClipのデータをインスタンス化して、Animation(旧アニメーションシステム)で動かすのでlegacyオプションをtrueにした上で、GameObjectにアタッチしたAnimationに対して追加、再生を実行すると、Editor上では問題なく再生されました。
csharp
var clip = Instantiate<AnimationClip>(Resources.Load<AnimationClip>(clipPath));
clip.legacy = true;
clip.wrapMode = WrapMode.Loop;
var animation = go.AddComponent<Animation>();
animation.AddClip(clip, "hoge");
animation.Play("hoge");
しかし、Android実機やエミュレータで確認してみると、アニメーションが再生されません。
試行錯誤の末、試しにAnimationClipのデータ自体のlegacyオプションをtrueにすると、同環境でも再生されました。
どういうことなの…。
となるとインスタンス化したAnimationClipの各種プロパティをScript上から変更しても反映されないってことかな?と思いましたが、上のコードで指定しているWrapModeの変更は反映されるという謎の状況。バグなのか何か間違っているのか。
もろもろの都合上、オリジナルのデータはいじりたくなかったので、諦めてAnimatorControllerをScriptで生成し、これを利用するつくるに変更しました。かなしみ。