从FBX提取其中的多个动画

  • Post author:
  • Post category:其他




为什么要写这个工具?

在这里插入图片描述

像上图这样,项目组中美术从3Dmax中导出动画时,只能导出fbx文件,如果我们只需要用到动画资源时,可以看到里面包含了其它我们不需要包含的资源;可以使用Ctrl+D来提取单个动画文件,但是如果想要批量从一个文件夹下提取所有的资源文件,就需要一个工具了。



翔翔跟其他人不一样的思路在哪里?

如果你现在正在为寻找标题这样一个工具而焦头烂额,那么这次的这个工具不会让你失望,本片文章的工具满足了以下需求:

1.右键Project -> AnimationTool -> GetAnimation打开配置菜单,很方便。

2.右键如果是FBX文件,则提取这个文件的动画,如果是文件夹则递归提取文件夹下的所有FBX文件的动画。

3.提取动画时,提取FBX文件下的所有动画,而不是一个。

4.自定义输出目录,不存在就创建目录。

5.如果已经有了这个文件,那么就删除之前的,用新的代替。

而网上大部分的动画提取工具能满足以上需求的少之又少



具体思路

具体的思路难度不是很大,按照以下流程走就可以了

1.点击按钮时,获取选中的所有objects。

UnityEngine.Object[] objects = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.DeepAssets);//获取所有选中的物体

2.遍历这些物体,物体若不包含”@”则继续寻找下一个。

3.找到了获取其所有的Assets。

 Object[] clips = AssetDatabase.LoadAllAssetsAtPath(fbxPath);

4.遍历这些Assets,如果能找到可以转换为AnimationClip就转换过去。

if (clips[r] is AnimationClip)
{
   AnimationClip fbxClip = clips[r] as AnimationClip;
}

5.当然还有一些无效的动画,我们需要过滤掉。

  if (fbxClip.name.Contains("__preview__"))
     continue;

6.创建一个新的AnimationClip,将这个AnimationClip复制过去。

  AnimationClip fbxClip = clips[r] as AnimationClip;
  EditorUtility.CopySerialized(fbxClip, clip);    //复制

7.创建一个新的Assets。

 AssetDatabase.CreateAsset(clip, path + outPath + aniName + ".anim");    //生成文件



代码以及使用方法

当然,这次的工具也是免费提供给大家的,技术交流请加QQ:504937430。使用方法:

将脚本拷贝到项目的Editor文件夹中,从Project面板中右键AnimationTool -> GetAnimation,然后配置好输出路径即可

链接:https://pan.baidu.com/s/1W4gmBmzhVN0UoqeanPUtIQ

提取码:zgbl

复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享



版权声明:本文为PMxiang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。