当前位置:   article > 正文

Unity提取模型动画_unitia提取动画

unitia提取动画

 

如图,fbx模型自带动画是不能用Unity自带的Animation工具编辑的,因为它是只读的。fbx里的动画作为SubAsset(子资产)存在。要想对这些动画做编辑或优化动画文件大小,就需要把这些动画从模型中提取出来。

步骤非常简单:

1.使用AssetDatabase.LoadAllAssetRepresentationsAtPath获取fbx的所有Sub Assets(子资产):

var subAssets = AssetDatabase.LoadAllAssetRepresentationsAtPath("Assets/fbxFile.fbx");

2.从Sub Assets中找到所有AnimationClip,并把模型里AnimationClip数据拷贝到新建AnimationClip,并把AnimationClip对象保存成文件:

  1. foreach (var item in subAssets)
  2. {
  3. if (item is AnimationClip animClip)
  4. {
  5. AnimationClip newClip = new AnimationClip();
  6. EditorUtility.CopySerialized(animClip, newClip);
  7. string animFile = string.Format("{0}/{1}.anim", outputDir, animClip.name);
  8. AssetDatabase.CreateAsset(newClip, animFile);
  9. }
  10. }

这样就把fbx里的AnimationClip提取成了独立的资产文件,就可以编辑修改了:

完整代码:

  1. [MenuItem("Assets/提取动画")]
  2. private static void ExtractFbxAnimationClips()
  3. {
  4. GameObject[] selectedObjects = Selection.gameObjects;
  5. foreach (GameObject obj in selectedObjects)
  6. {
  7. var subAssets = AssetDatabase.LoadAllAssetRepresentationsAtPath(AssetDatabase.GetAssetPath(obj));
  8. var outputDir = Path.GetDirectoryName(AssetDatabase.GetAssetPath(obj));
  9. foreach (var item in subAssets)
  10. {
  11. if (item is AnimationClip animClip)
  12. {
  13. AnimationClip newClip = new AnimationClip();
  14. EditorUtility.CopySerialized(animClip, newClip);
  15. string animFile = string.Format("{0}/{1}.anim", outputDir, animClip.name);
  16. AssetDatabase.CreateAsset(newClip, animFile);
  17. }
  18. }
  19. }
  20. AssetDatabase.Refresh();
  21. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1019447
推荐阅读
相关标签
  

闽ICP备14008679号