本文主要是介绍unity性能优化之降低动画文件的大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Animation是Unity中的动画文件,主要内容由一个个关键帧数据构成。通过将Unity的资源序列化方式调整为Text,就可以以文本方式查看动画文件。通过菜单项Edit -> Project Settings -> Editor打开Editor Settings窗口,就可以设置资源序列化方式
打开一个anim文件看里面内容:里面使用的浮点数精度都比较高,因此我们可以通过降低精度的方式来减小动画文件的大小
具体做法查看以下代码:
void OnPostprocessModel(GameObject g) {List<AnimationClip> animationClipList = new List<AnimationClip>(AnimationUtility.GetAnimationClips(g));if (animationClipList.Count == 0) {AnimationClip[] objectList = UnityEngine.Object.FindObjectsOfType (typeof(AnimationClip)) as AnimationClip[];animationClipList.AddRange(objectList);}foreach (AnimationClip theAnimation in animationClipList){try {//去除scale曲线foreach (EditorCurveBinding theCurveBinding in AnimationUtility.GetCurveBindings(theAnimation)){string name = theCurveBinding.propertyName.ToLower();if (name.Contains("scale")){AnimationUtility.SetEditorCurve(theAnimation, theCurveBinding, null);}} //浮点数精度压缩到f3AnimationClipCurveData[] curves = null;curves = AnimationUtility.GetAllCurves(theAnimation);Keyframe key;Keyframe[] keyFrames;for (int ii = 0; ii < curves.Length; ++ii){AnimationClipCurveData curveDate = curves[ii];if (curveDate.curve == null || curveDate.curve.keys == null){continue;}keyFrames = curveDate.curve.keys;for (int i = 0; i < keyFrames.Length; i++){key = keyFrames[i];key.value = float.Parse(key.value.ToString("f3"));key.inTangent = float.Parse(key.inTangent.ToString("f3"));key.outTangent = float.Parse(key.outTangent.ToString("f3"));keyFrames[i] = key;}curveDate.curve.keys = keyFrames;theAnimation.SetCurve(curveDate.path, curveDate.type, curveDate.propertyName, curveDate.curve);}}catch (System.Exception e){Debug.LogError(string.Format("CompressAnimationClip Failed !!! animationPath : {0} error: {1}", assetPath, e));}}
}
这篇关于unity性能优化之降低动画文件的大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!