由于自身的懒惰,一年多没写博客了。。十分愧疚,回想来还是写博客才能将知识更好的牢记并发现问题
前几天工作需要做一个自动生成动画组件的工具类,美术一般只会将做好的动画模型发给你,如果每个模型都手动自己新建Animator再绑定的话 是十分浪费时间的,所以必须得实现脚本自动化。
根据近几天参考的几篇博客,自己写了一个工具类,下面进入正题
- 将模型的动作模型(一般是FBX文件)放进一个文件夹中,并规定命名。 (例如:model_1为待机动画,model_2为行走动画)
- 创建一个脚本用作工具类起名为AnimatorTool,脚本中定义一个工具类函数
[MenuItem("Tools/自动生成动画控制器")]
public static void AutoAllCreateAnimatorControll()
在该函数中,将要进行三步操作
-
从FBX文件中导出AnimationClip组件
-
压缩AnimationClip
-
生成AnimatorController组件
首先我们来实现第一步,新建一个函数名为ExportAllAnimationClips
public static void ExportAllAnimationClips()
{
//检查是否存在animationClips存放的目录
if (Directory.Exists(Application.dataPath + PathTools._AnimationClipsDir) == false) //此处的PathTools._AnimationClipsDir为你自己想存放AnimationClip的路径
{
Directory.CreateDirectory(Application.dataPath + PathTools._AnimationClipsDir);
}
DirectoryInfo directoryInfo = new DirectoryInfo(PathTools._FBXDir);//PathTools._FBXDir是之前存放了模型动画的文件夹
FileInfo[] fileInfos = directoryInfo.GetFiles();
foreach (FileInfo fileInfo in fileInfos)
{
if (fileInfo.Extension == ".fbx")
{
string fileName = fileInfo.Name.Substring(0, fileInfo.Name.IndexOf("."));//获取模型文件的名称
string pathName = fileInfo.FullName.Substring(fileInfo.FullName.IndexOf("Assets\\"));//获取模型文件的Unity的路径
AnimationClip animationClip = AssetDatabase.LoadAssetAtPath<AnimationClip>(pathName);//获取模型文件中的AnimationClip组件
if (animationClip != null)
{
//以下是验证文件命名的方法 可以根据自己项目来定
string[] names = fileName.Split('_');
if (names.Length != 2)
{
Debug.LogError(fileName + "文件命名有问题,请检查");
continue;
}
int param1, param2, param3 = 0;
if (names[0] != "Model" || int.TryParse(names[1], out param1) == false)
{
Debug.LogError(fileName + "文件命名有问题,请检查");
continue;
}
//创建动画片段
AnimationClip clipTemp = new AnimationClip();
EditorUtility.Cop