using System.IO; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public static class ExtractAnimationTool { static string animationRoot = "Assets/Art/Animations/"; static string animExtractRoot = "Assets/Art/AnimClips/"; [MenuItem("Erika/Extract All Animation")] static void ExtractAnimations() { string[] files = Directory.GetFiles(animationRoot, "*.fbx", SearchOption.AllDirectories); if (EditorUtility.DisplayCancelableProgressBar("Extract Animation 0/" + files.Length, "...", 0)) { return; } for (int i = 0; i < files.Length;++i) { string file = files[i].Replace("\\", "/").Replace(Application.dataPath, "Assets/"); string name = Path.GetFileNameWithoutExtension(file); //UnityEngine.Object[] clips = AssetDatabase.LoadAllAssetsAtPath(file); //int k = 0; //for (int j = 0; j < clips.Length; ++j) //{ // if (!(clips[j] is AnimationClip && clips[j])) // continue; //AnimationClip clip = clips[j] as AnimationClip; AnimationClip clip = AssetDatabase.LoadAssetAtPath(file); if (clip == null) continue; string saveFolder = Path.GetDirectoryName(file).Replace("\\", "/").Replace(animationRoot, animExtractRoot) + "/"; if (!Directory.Exists(saveFolder)) Directory.CreateDirectory(saveFolder); //string savePath = saveFolder + name + (k == 0? "": "_" + k.ToString()) + ".anim"; string savePath = saveFolder + name + ".anim"; AnimationClip saveClip = Object.Instantiate(clip); AssetDatabase.CreateAsset(saveClip, savePath); //++k; //} if(EditorUtility.DisplayCancelableProgressBar("Extract Animations "+ (i+1) + "/" + files.Length, file, (i + 1) /(float) files.Length) ) { break; } } EditorUtility.ClearProgressBar(); } /// /// 提取动画 /// /// fbx路径(Unity风格) public static void ExtractAnimation(string path) { AnimationClip clip = AssetDatabase.LoadAssetAtPath(path); if (clip == null) return; string name = Path.GetFileNameWithoutExtension(path); string folder = Path.GetDirectoryName(path).Replace(animationRoot, animExtractRoot); AnimationClip saveClip = Object.Instantiate(clip); AssetDatabase.CreateAsset(saveClip, folder + "/" + name + ".anim"); } }