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に気付くかどうかって所でしたね。