[Unity]优化裁剪Unity骨骼动画,减少动画文件容量
2020/04
18
08:04
我们做的android游戏项目对安装包有容量限制,原先是限制在100M之内,分析了一下, Texture占用容量最多, 排名第二的竟然是 角色动画文件
一个角色含有若干个动作,一个动作文件约1M+大小, 原来我们在PC上使用Gamebryo制作端游时,一般一个kf文件也只有20KB. 虽然Unity的动作数据是原始文本文件, 但也不至于这么大…
与美术同学聊了一下, 想到了一个裁剪方案, 由于角色动画一般只有旋转是有效的, 缩放基本上不用,位移用得也很少. 那我们可以制作一个自动裁剪的工具,按规则将不用的绽放和位移属性干掉:
以下是代码
static public bool SetAnimationCurveData(AnimationClip clip)
{
if (clip == null)
{
return false;
}
AnimationClipCurveData[] curveDatas = AnimationUtility.GetAllCurves(clip, true);
if (curveDatas == null)
{
return false;
}
// 清除原来所有的数据
clip.ClearCurves();
float len = clip.length ;
foreach (AnimationClipCurveData dt in curveDatas)
{
// 进行过滤
if (IsFilterCurveData(dt))
{
continue;
}
// 将数据存回去
clip.SetCurve(dt.path, dt.type, dt.propertyName, dt.curve);
}
return true;
}
static public bool SetCurveByAssetPath(string assetPath)
{
UnityEngine.Object obj = AssetDatabase.LoadAssetAtPath(assetPath, typeof(UnityEngine.Object));
if (obj == null)
{
return false;
}
if (!(obj is AnimationClip))
{
return false;
}
AnimationClip clip = obj as AnimationClip;
SetAnimationCurveData(clip, true);
return true;
}
另外还有一种优化选项,把不重要的骨骼,导入的时候,这2条设置为较大的值,例如3
CopyRights: The Post by BY-NC-SA For Authorization,Original If Not Noted,Reprint Please Indicate From 老刘@开发笔记
Post Link: [Unity]优化裁剪Unity骨骼动画,减少动画文件容量
Post Link: [Unity]优化裁剪Unity骨骼动画,减少动画文件容量