public static AnimationClipStatsInfo GetAnimationClipStats(AnimationClip clip) { if (getAnimationClipStats == null) { getAnimationClipStats = typeof(AnimationUtility).GetMethod("GetAnimationClipStats", BindingFlags.Static | BindingFlags.NonPublic); var aniclipstats = typeof(AnimationUtility).Assembly.GetType("UnityEditor.AnimationClipStats"); sizeInfo = aniclipstats.GetField("size", BindingFlags.Public | BindingFlags.Instance); totalCurvesInfo = aniclipstats.GetField("totalCurves", BindingFlags.Public | BindingFlags.Instance); constantCurvesInfo = aniclipstats.GetField("constantCurves", BindingFlags.Public | BindingFlags.Instance); denseCurvesInfo = aniclipstats.GetField("denseCurves", BindingFlags.Public | BindingFlags.Instance); streamCurvesInfo = aniclipstats.GetField("streamCurves", BindingFlags.Public | BindingFlags.Instance); } var stats = getAnimationClipStats.Invoke(null, new object[] { clip }); var stats2 = new AnimationClipStatsInfo { size = (int)sizeInfo.GetValue(stats), totalCurves = (int)totalCurvesInfo.GetValue(stats), constantCurves = (int)constantCurvesInfo.GetValue(stats), denseCurves = (int)denseCurvesInfo.GetValue(stats), streamCurves = (int)streamCurvesInfo.GetValue(stats), }; return(stats2); }
private static List <KeyValuePair <string, object> > AnalyzeAnimationClip(AnimationClip clip, SerializedObject serializedObject) { var stats = AnimationClipStatsInfo.GetAnimationClipStats(clip); var propertys = new List <KeyValuePair <string, object> > { new KeyValuePair <string, object>("总曲线数", stats.totalCurves), new KeyValuePair <string, object>("Constant曲线数", stats.constantCurves), new KeyValuePair <string, object>("Dense曲线数", stats.denseCurves), new KeyValuePair <string, object>("Stream曲线数", stats.streamCurves), #if UNITY_5 || UNITY_5_3_OR_NEWER new KeyValuePair <string, object>("事件数", clip.events.Length), #else new KeyValuePair <string, object>("事件数", AnimationUtility.GetAnimationEvents(clip).Length), #endif new KeyValuePair <string, object>("内存占用", stats.size), }; return(propertys); }