将以下脚本放在Editor下即可,带动画的模型文件要跟配置文件在同一目录
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
public class FbxModel
{
public string name;
public int firstFrame;
public int lastFrame;
public bool loopTime;
public bool loopPose;
}
/// <summary>
/// FBX动画自动分段工具
/// 使用:需要将配置表和模型放入同一个文件夹,然后将模型导入即可
/// 配置表格式(.txt):
/// firstFrame|lastFrame|name|isLoop 例如 “0|50|one|true”
/// </summary>
public class FbxSettingTool : AssetPostprocessor
{
public void OnPreprocessModel()
{
Debug.Log("模型路径"+assetPath);
try
{
if (EditorUtility.DisplayDialog("模型导入", "是否使用预设方案", "是", "否"))
{
List<FbxModel> fbxModelList = new List<FbxModel>();
//替换后缀
string text = Path.ChangeExtension(assetPath, ".txt");
StreamReader file = new StreamReader(text);
string clipInfo = file.ReadToEnd();
file.Close();
string[] clipInfosArr = clipInfo.Split('\n');
for (int i = 0; i < clipInfosArr.Length; i++)
{
string[] info = clipInfosArr[i].Split('|');
FbxModel fbxModel = new FbxModel();
fbxModel.firstFrame = int.Parse(info[0]);
fbxModel.lastFrame = int.Parse(info[1]);
fbxModel.name = info[2];
//bool isLoop = info[3] == "0" ? true : false;
bool isLoop = bool.Parse(info[3]);
Debug.Log("是否循环"+isLoop);
fbxModel.loopTime = isLoop;
fbxModel.loopPose = isLoop;
fbxModelList.Add(fbxModel);
}
//模型导入器
ModelImporter importer = assetImporter as ModelImporter;
ArrayList clipsList = new ArrayList();
for (int i = 0; i < fbxModelList.Count; i++)
{
//动画片段
ModelImporterClipAnimation clipAnimation = new ModelImporterClipAnimation();
clipAnimation.name = fbxModelList[i].name;
clipAnimation.firstFrame = fbxModelList[i].firstFrame;
clipAnimation.lastFrame = fbxModelList[i].lastFrame;
clipAnimation.loopTime = fbxModelList[i].loopTime;
clipAnimation.loopPose = fbxModelList[i].loopPose;
clipsList.Add(clipAnimation);
}
importer.clipAnimations = (ModelImporterClipAnimation[])clipsList.ToArray(typeof(ModelImporterClipAnimation));
}
}
catch (System.Exception e)
{
EditorUtility.DisplayDialog("导入错误", e.ToString(), "关闭");
}
}
}