博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity 动态加载Animator Event 事件
阅读量:4147 次
发布时间:2019-05-25

本文共 3708 字,大约阅读时间需要 12 分钟。

前一阵子频繁更改模型,总是手动添加动画事件 animator events一直比较麻烦,我就想能不能动态的生成对应的动画事件呢,然后找了一些资料,试了下感觉还不错,分享给大家,欢迎大家留言交流~需要注意的是修改后的动画事件重新动态加载后依然保留,猜测注册修改的是元数据,除非注销或者程序停止才能恢复。

using UnityEngine;using System.Collections;public class DynamicLoading_AninatorEvents_SZQ : MonoBehaviour{    private Animator m_Animator = null;    private RuntimeAnimatorController m_runtimeAnimatorController = null;    private AnimationClip[] clips = null;    void Start()    {        m_Animator = GetComponent
(); // 获取运行时运行时动画器控制器 m_runtimeAnimatorController = m_Animator.runtimeAnimatorController; //获取含有的动画片段 clips = m_runtimeAnimatorController.animationClips; //根据动画名称设置对应的事件 for (int i = 0; i < clips.Length; i++) { if (clips[i].events.Length == 0) switch (clips[i].name) { case "animator_0": { AnimationEvent m_animator_0_Start = new AnimationEvent(); AnimationEvent m_animator_0_Running = new AnimationEvent(); AnimationEvent m_animator_0_End = new AnimationEvent(); //对应事件触发相应函数的名称 m_animator_0_Start.functionName = "Animator_0_Start_Event"; m_animator_0_Running.functionName = "Animator_0_Running_Event"; m_animator_0_End.functionName = "Animator_0_End_Event"; //设定对应事件在相应动画时间轴上的触发时间点 m_animator_0_Start.time = 0;//对应动画开始处触发 m_animator_0_Running.time = clips[i].length * 0.5f;//中间 m_animator_0_End.time = clips[i].length;//结尾 //把事件添加到时间轴上 clips[i].AddEvent(m_animator_0_Start); clips[i].AddEvent(m_animator_0_Running); clips[i].AddEvent(m_animator_0_End); } break; case "animator_1": { AnimationEvent m_animator_1_Start = new AnimationEvent(); AnimationEvent m_animator_1_Running = new AnimationEvent(); AnimationEvent m_animator_1_End = new AnimationEvent(); //对应事件触发相应函数的名称 m_animator_1_Start.functionName = "Animator_1_Start_Event"; m_animator_1_Running.functionName = "Animator_1_Running_Event"; m_animator_1_End.functionName = "Animator_1_End_Event"; //设定对应事件在相应动画时间轴上的触发时间点 m_animator_1_Start.time = 0;//对应动画开始处触发 m_animator_1_Running.time = clips[i].length * 0.5f;//中间 m_animator_1_End.time = clips[i].length;//结尾 //把事件添加到时间轴上 clips[i].AddEvent(m_animator_1_Start); clips[i].AddEvent(m_animator_1_Running); clips[i].AddEvent(m_animator_1_End); } break; } } //重新绑定动画器的所有动画的属性和网格数据。 m_Animator.Rebind(); } void Animator_0_Start_Event() { } void Animator_0_Running_Event() { } void Animator_0_End_Event() { } void Animator_1_Start_Event() { } void Animator_1_Running_Event() { } void Animator_1_End_Event() { } ///
/// 注销对应事件 /// void UnSubscription() { for (int i = 0; i < clips.Length; i++) { clips[i].events = default(AnimationEvent[]); } }}

你可能感兴趣的文章
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
VUe+webpack构建单页router应用(一)
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>