从FBX提取其中的多个动画
为什么要写这个工具?
像上图这样,项目组中美术从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的分享