unity 自动分割Fbx下的动画片段

本工具介绍了一个Unity编辑器脚本,用于自动分割FBX动画为多个片段。通过读取同目录下的配置文件,可以指定每个动画片段的起始帧、结束帧、名称及循环设置,实现模型动画的快速切割。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将以下脚本放在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(), "关闭");
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值