summaryrefslogtreecommitdiff
path: root/Assets/Editor/Tools/ExtractAnimationTool.cs
blob: 23e7d5c92bf2b83e37f8a5700e224d8261f5cda5 (plain)
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");
	}

}