UnityでAnimatorに設定されたAnimationの再生フレーム数を取得する方法 | mk-soundtrackのブログ

mk-soundtrackのブログ

ゲーム開発日記。
ゲーム感想日記。
音楽鑑賞日記。

UnityでAnimatorに設定されたAnimationの再生フレーム数を取得するのなんて


もっと簡単に出来るものかと思っていたが、やってる人がいなければ思い付かない


レベルで簡略化というかライトなユーザーが置き去りにされつつある気がする。


ゲーム業界自体の悪い傾向なのにツールまでそうでは結局ゲームの未来を


悲観せざるを得ない感じになってしまう・・・


という感情論はいいとして、プログラムです。


float getTimeOfAnimation(string clipname){

RuntimeAnimationController rac = animator.runtimeAnimationController;

UnityEditor.Animations.AnimatorController ac = rac as UnityEditor.Animations.AnimatorController;

foreach(AnimationClip clip in ac.animationClips){

if (clip.name.Equals(clipname)){

return clip.length;

}

}

return 0.0f;

}


↑こんな感じでイケるようです。


関数としては微妙かもしれませんが、中身のAnimationClipを取り出す所は


これでイケると思います!


↑すんません。これでイケませんでした。


これをBuildするとUnityEditorが使えない云々のエラーが出ます。


なので正しくは↓こちら↓が正解です。


private float ReadTimeFromAnimator(Animator animator, string clipname){
if (animator != null) {
RuntimeAnimatorController ac = animator.runtimeAnimatorController;
AnimationClip clip = System.Array.Find<AnimationClip> (ac.animationClips, (AnimationClip) => AnimationClip.name.Equals (clipname));
if (clip != null) {
return clip.length;
}
}
return 0.0f;
}


System.Array.Findしている所は↓こんな感じでforeachで回しても良いと思います。


foreach (AnimationClip clip in ac.animationClips) {
if (clip.name.Equals(clipname)){
return clip.length;
}
}

なんか割と簡単というかRuntimeAnimatorControllerに気付くかどうかって所でしたね。