美術作的人物動畫,是不需要用到scale的,所以動畫數據裏有大量的scale冗餘信息。體現在constant curves數目過多。如圖所示
如何去掉冗餘的scale信息?
可以使用OnPostprocessModel後處理腳本在import的時候去掉scale信息。對比下處理前後的結果
處理前
處理後:
constant曲線減少了300左右,整體內存減少了16%。(該模型Generic模式、使用Optimal壓縮格式)
我自己實測,美術模型的Object數目越多,這個優化的效果越明顯(並不確定)。如果只有一個object,優化一般只有2~3%。
Tips,如果想在editor中瞭解動畫文件在真機內存中的佔用,可以看inspector裏面顯示的容量,該數據與真機內存佔用非常接近,雖然並不完全相同 [By Xin]
附上後處理代碼
void OnPostprocessModel(GameObject g) {
// for skeleton animations.
if(assetPath.Contains("_anim"))
{
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)
{
foreach (EditorCurveBinding theCurveBinding in AnimationUtility.GetCurveBindings(theAnimation))
{
string name = theCurveBinding.propertyName.ToLower();
if (name.Contains("scale"))
{
AnimationUtility.SetEditorCurve(theAnimation, theCurveBinding, null);
}
}
}
}
}```