Unity导出FBX模型中的动画片段

导出选中的FBX中的AnimationClip文件到文件夹中

public class ExportAnimFromFBX : EditorWindow
{
    [UnityEditor.MenuItem("Assets/导出FBX中的Animation")]
    private static void ExportAnimation()
    {
        // SelectionMode.DeepAssets: 如果选择包含文件夹,则还包括文件层级视图中该文件夹下的所有资源和子文件夹。
        var gameObjects = Selection.GetFiltered<UnityEngine.Object>(UnityEditor.SelectionMode.DeepAssets);
        string path = "Assets/ExportAnimation/{0}.anim";

        // 创建一个存放Animation的文件夹
        if (!AssetDatabase.IsValidFolder("Assets/ExportAnimation"))
            AssetDatabase.CreateFolder("Assets", "ExportAnimation");

        List<Object> animationClips = new List<Object>();
        for (int i = 0; i <= gameObjects.Length - 1; i++)
        {
            // AnimationUtility.GetAnimationClips()方法可以检索与游戏对象或组件关联的动画剪辑数组。但是这里不适用
            // 使用AssetDatabase.LoadAllAssetsAtPath函数提取fbx中的AnimationClip,该函数接收一个路径参数,即fbx文件所在路径,然后返回一个Object类型的数组,数组中存放的是fbx文件中的所有资源
            var objs = AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(gameObjects[i]));
            // 取出其中的AnimationClip
            foreach (var obj in objs)
            {
                //UnityEngine.PreviewAnimationClip是在编辑器中查看动画的临时剪辑,比如在动画曲线编辑器中(名字格式如:__preview__Take 001),你可以看到一些动画的预览剪辑。
                //UnityEngine.AnimationClip是最终实际播放的动画剪辑,该剪辑可以保存在项目中,然后由Animator或Animation组件加载并播放。
                if (obj is AnimationClip && !obj.name.Contains("__preview__"))//脚本中没有UnityEngine.PreviewAnimationClip类型, 所以这里用string.Contains判断
                { 
                    animationClips.Add(obj);
                }
            }
        }

        foreach (AnimationClip Clip in animationClips)
        {
            Object newClip = new AnimationClip();
            EditorUtility.CopySerialized(Clip, newClip);
            newClip.name = Clip.name;
            AssetDatabase.CreateAsset(newClip, string.Format(path, newClip.name));
        }
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值