1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
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<AnimationClip>(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();
}
/// <summary>
/// 提取动画
/// </summary>
/// <param name="path">fbx路径(Unity风格)</param>
public static void ExtractAnimation(string path)
{
AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(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");
}
}
|