• Unity之如何从fbx提取Animation clip文件


    从 fbx 中提取 clip 文件,选中 clip 按 Ctrl + D 就可以实现。

    但有时候需要工具来做这件事情,

    提取的同时对 clip 进行了压缩,并且去除了scale

    代码如下:

     1     static AnimationClip GenerateAnimClip(string fbx, string savePath)
     2     {
     3         AnimationClip src = AssetDatabase.LoadAssetAtPath<AnimationClip>(fbx);
     4         AnimationClip temp = new AnimationClip();
     5         EditorUtility.CopySerialized(src, temp);
     6         CompressAnimationClip(temp);                // 压缩 anim clip
     7         RemoveAnimClipScale(temp);                  // 去除 scale
     8         CreateDirectory(savePath);
     9         AssetDatabase.CreateAsset(temp, savePath);
    10         EditorUtility.SetDirty(temp);
    11         return temp;
    12     }
    13 
    14     static void RemoveAnimClipScale(AnimationClip clip)
    15     {
    16         foreach (EditorCurveBinding theCurveBinding in AnimationUtility.GetCurveBindings(clip))
    17         {
    18             string name = theCurveBinding.propertyName.ToLower();
    19             if (name.Contains("scale"))
    20             {
    21                 AnimationUtility.SetEditorCurve(clip, theCurveBinding, null);
    22             }
    23         }
    24     }
    25 
    26     public static bool CompressAnimationClip(AnimationClip clip)
    27     {
    28         try
    29         {
    30             AnimationClipCurveData[] curves = AnimationUtility.GetAllCurves(clip);
    31             Keyframe key;
    32             Keyframe[] keyFrames;
    33             for (int ii = 0; ii < curves.Length; ++ii)
    34             {
    35                 AnimationClipCurveData curveDate = curves[ii];
    36                 if (curveDate.curve == null || curveDate.curve.keys == null)
    37                 {
    38                     //Debug.LogWarning(string.Format("AnimationClipCurveData {0} don't have curve; Animation name {1} ", curveDate, animationPath));
    39                     continue;
    40                 }
    41                 keyFrames = curveDate.curve.keys;
    42                 for (int i = 0; i < keyFrames.Length; i++)
    43                 {
    44                     key = keyFrames[i];
    45                     key.value = float.Parse(key.value.ToString("f3"));
    46                     key.inTangent = float.Parse(key.inTangent.ToString("f3"));
    47                     key.outTangent = float.Parse(key.outTangent.ToString("f3"));
    48                     keyFrames[i] = key;
    49                 }
    50                 curveDate.curve.keys = keyFrames;
    51                 clip.SetCurve(curveDate.path, curveDate.type, curveDate.propertyName, curveDate.curve);
    52             }
    53             //AssetDatabase.CreateAsset(clip, animationPath);
    54             Debug.Log(string.Format("  CompressAnimationClip {0} Success !!!", clip.name));
    55             return true;
    56         }
    57         catch (Exception e)
    58         {
    59             Debug.LogError(string.Format("CompressAnimationClip Failed !!! animationPath : {0} error: {1}", clip.name, e));
    60             return false;
    61         }
    62     }

    转载请注明出处:https://www.cnblogs.com/jietian331/p/7264367.html

  • 相关阅读:
    (24)ajax上传json格式的数据
    (23)ajax实现上传文件的功能
    (22)Ajax的基本使用(实现登录功能和局部刷新以及防止跨站请求伪造攻击)
    (21)模型层 -ORM之msql 聚合查询,F和Q(与、或、非查询)、分组查询
    (20)模型层 -ORM之msql 基于双下划线的跨表查询(一对一,一对多,多对多)
    Python init.py
    python 模块积累-----subprocess
    linux修改root密码
    Django urls.py报错: raise TypeError('view must be a callable or a list/tuple in the case of include()
    Python------uuid
  • 原文地址:https://www.cnblogs.com/jietian331/p/7264367.html
Copyright © 2020-2023  润新知