直接将我下面的代码复制到unity里面去
然后要将导入的FBX和配置文件放到一个文件夹下面,配置文件的名字要和FBX相同
例如下面的实现效果 是我在一个任意文件夹 s 里面放了两个文件 Alicia.FBX和Alicia.txt
实现效果:
配置文件的格式是: 起始帧|结束帧|名字|是否循环(0或1)
示例:0|50|idle|0 //这个就是切一个名字叫 idle 的动画片段 从第 0 到第 50 帧 不循环
51|100|idle|1 //这个就是切一个名字叫 idle 的动画片段 从第 51 到第 100 帧 循环
实现效果:
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
/// </summary>
public class FbxSettingTool : AssetPostprocessor
{
public void OnPreprocessModel()
{
try
{
if (Path.GetExtension(assetPath) == ".FBX")
{
if (EditorUtility.DisplayDialog("模型导入", "是否使用预设方案", "是", "否"))
{
List<FbxModel> fbxModelList = new List<FbxModel>();
string fileAnim = DragAndDrop.paths[0];
string text = Path.ChangeExtension(fileAnim, ".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;
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(), "关闭");
}
}
}