unity导入FBX自动设置动画分段

直接将我下面的代码复制到unity里面去

然后要将导入的FBX和配置文件放到一个文件夹下面,配置文件的名字要和FBX相同

例如下面的实现效果 是我在一个任意文件夹 s 里面放了两个文件 Alicia.FBX和Alicia.txt 

 实现效果:

unity导入FBX自动设置动画分段_第1张图片

 

配置文件的格式是:  起始帧|结束帧|名字|是否循环(0或1)

                            示例:0|50|idle|0              //这个就是切一个名字叫   idle  的动画片段  从第 到第 50 帧  不循环

                                      51|100|idle|1           //这个就是切一个名字叫   idle  的动画片段  从第 51 到第 100 帧  循环

                           实现效果:

                                        unity导入FBX自动设置动画分段_第2张图片

 

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;
}
///


/// FBX动画自动分段工具
/// 使用:需要将配置表和模型放入同一个文件夹,然后将模型导入即可
/// 配置表格式(.txt):
///           firstFrame|lastFrame|name|isLoop
///

public class FbxSettingTool : AssetPostprocessor
{
    public void OnPreprocessModel()
    {
        try
        {
            if (Path.GetExtension(assetPath) == ".FBX")
            {
                if (EditorUtility.DisplayDialog("模型导入", "是否使用预设方案", "是", "否"))
                {
                    List fbxModelList = new List();

                    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(), "关闭");
        }
    }
}

你可能感兴趣的:(工具类)