【Editor】使用unity editor 脚本自动为模型动画添加回调事件

 

首先需要对模型进行设置:

 

关于这 3 中格式的介绍,可以查看这个:

https://blog.csdn.net/weixin_38239050/article/details/79648042

 

 

具体代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Reflection;

public class AutoAddAnimationEvent
{
    private static string[] animtionEventsName = new string[3] { "OnAnimationActionStart", "OnAnimationActionIn", "OnAnimationActionEnd" };

    [MenuItem("Assets/AddAnimationEvent")]
    private static void ADDEvent()
    {
        List<AnimationEvent> events = new List<AnimationEvent>();
        foreach (Object item in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets))
        {
            if (item.name.Contains("@"))
            {
                Selection.activeObject = item;
                events.Clear();
                ModelImporter importer = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(item)) as ModelImporter;
                ModelImporterClipAnimation[] animation = importer.clipAnimations;
                if(animation.Length <= 0) //给一个初始值
                {
                    animation = importer.defaultClipAnimations;
                }
                if (animation.Length > 0)
                {
                    
                    ModelImporterClipAnimation clipAnimation = animation[0];
                    for (int index = 0; index < 3; index++)
                    {
                        AnimationEvent _event = new AnimationEvent();
                        _event.functionName = animtionEventsName[index];
                        //设置 回调事件的时间。
                        _event.time = index == 0 ? clipAnimation.firstFrame / clipAnimation.lastFrame + 0.1f : index == 1 ? clipAnimation.lastFrame / clipAnimation.lastFrame / 2 : clipAnimation.lastFrame / clipAnimation.lastFrame - 0.12f;
                        _event.floatParameter = 0;
                        _event.intParameter = 0;
                        events.Add(_event);
                    }
                    animation[0].events = events.ToArray();
                    importer.clipAnimations = animation;
                    importer.SaveAndReimport();
                }
            }
        }
        AssetDatabase.Refresh();
    }
}

 

最后效果:

点击这些事件点,就可以看到具体的事件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值