前提:切换资源序列化模式为Force Text
(一般在公司就是这个,因为git只能用text)
打开*.anim文件,可以看到里面浮点数精度比较高,可以降低精度减少动画文件大小
(PS:小心美术diss你,他可能觉得动画不准了)
看一眼:

那么如何优化呢?
public static void ClearAnimation()
{
string title = "Clear Animation";
Object[] objs = Selection.GetFiltered(typeof(AnimationClip), SelectionMode.DeepAssets);
for (int i = 0; i < objs.Length; i++)
{
AnimationClip clip = objs[i] as AnimationClip;
EditorUtility.DisplayProgressBar(title, "Clear In : " + clip.name, (i + 1) * 1f / objs.Length);
if (clip)
{
EditorCurveBinding[] bindings = AnimationUtility.GetCurveBindings(clip);
foreach (EditorCurveBinding binding in bindings)
{
if (binding.propertyName.ToLower().Contains("scale"))//删减scale帧,一般都是rotattion和position
{
AnimationUtility.SetEditorCurve(clip, binding, null);
}
AnimationCurve curve = AnimationUtility.GetEditorCurve(clip, binding);//动画精度压缩 #.###
if (curve != null && curve.keys != null)
{
Keyframe[] keys = curve.keys;
for (int k = 0; k < keys.Length; k++)
{
Keyframe key = keys[k];
key.value = float.Parse(key.value.ToString("f3"));
key.inTangent = float.Parse(key.inTangent.ToString("f3"));
key.outTangent = float.Parse(key.outTangent.ToString("f3"));
keys[k] = key;
}
curve.keys = keys;
AnimationUtility.SetEditorCurve(clip, binding, curve);
}
}
EditorUtility.SetDirty(clip);
}
}
EditorUtility.ClearProgressBar();
AssetDatabase.SaveAssets();
}
基本上能压缩50%以上,可以在insptector视图看压缩前后大小对比:

网友评论