Unity3D 自动切割动画

模型太复杂,动画帧数多,手动切割动画Unity要卡死三分钟……搜索发现以下解决方法

原文地址点击这里


using UnityEngine;
using System.Collections;
using UnityEditor;

public class FBXAnimationsFix : AssetPostprocessor  
{  
    public void OnPreprocessModel()  
    {  
        //当前正在导入的模型  
        ModelImporter modelImporter = (ModelImporter) assetImporter;  
  
        AnimationClipConfig.init();  
  
        foreach (AnimationClipConfig.modelST item in AnimationClipConfig.modelList)  
        {  
            //当前导入模型的路径包含我们modelST动作数据表中的模型名字,那就要对这个模型的动画进行切割  
            if (assetPath.Contains(item.ModelName))  
            {  
                modelImporter.animationType = ModelImporterAnimationType.Legacy;  
  
                //modelImporter.splitAnimations = true;  
                modelImporter.generateAnimations = ModelImporterGenerateAnimations.GenerateAnimations;  
  
                ModelImporterClipAnimation[] animations = new ModelImporterClipAnimation[item.clipSTs.Length];  
                for (int i = 0; i < item.clipSTs.Length; i++)  
                {  
                    animations[i] = SetClipAnimation(item.clipSTs[i].name, item.clipSTs[i].firstFrame, item.clipSTs[i].lastFrame, item.clipSTs[i].isloop);  
                }  
  
                modelImporter.clipAnimations = animations;  
            }  
        }  
    }

    ModelImporterClipAnimation SetClipAnimation(string _name, int _first, int _last, bool _isLoop)
    {
        ModelImporterClipAnimation tempClip = new ModelImporterClipAnimation();
        tempClip.name = _name;
        tempClip.firstFrame = _first;
        tempClip.lastFrame = _last;
        tempClip.loop = _isLoop;
        if (_isLoop)
            tempClip.wrapMode = WrapMode.Loop;
        else
            tempClip.wrapMode = WrapMode.Default;

        return tempClip;
    }  
}  
  


using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public static class AnimationClipConfig
{
    public static bool isInit = false;
    public static List<modelST> modelList = new List<modelST>();

    public static void init()
    {
        if (isInit)
            return;
        isInit = true;

        modelST tempModel = new modelST();
        tempModel.ModelName = "name";               //模型名字  
        tempModel.clipSTs = new clipST[]{  
            new clipST("Step1" , 0, 20, false),           
            new clipST("Step2" , 20, 40, false),         
            new clipST("Step3" ,40, 70, false),    
            new clipST("Step4" , 70, 90, false),
        };
        modelList.Add(tempModel);


    }

    #region ST
    public class clipST
    {
        public string name;
        public int firstFrame;
        public int lastFrame;
        public bool isloop;

        public clipST(string _n, int _f, int _l, bool _i)
        {
            name = _n;
            firstFrame = _f;
            lastFrame = _l;
            isloop = _i;
        }
    }

    public class modelST
    {
        public string ModelName;
        public clipST[] clipSTs;
    }
    #endregion
}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值