Unity 动态为AnimationClip 注入事件的小工具类
来源:互联网 发布:博雅大数据学院 官网 编辑:程序博客网 时间:2024/06/01 09:36
需求来源:美术每次改动画,程序都要重新把AnimEvent加入AnimationClip一遍,这不科学。(其实这事情也可以给策划做,但是策划太蠢了。)
于是我写了一个小工具类,可以动态注入Anim事件,只要AnimClip的名字不改,一切都会是那么的美好。
配置图:
代码如下:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class AnimationEventInjector : MonoBehaviour{ [System.Serializable] public class InjectEvent { public string TargetClip; public string FunctionName; public string stringParam; public int intParam; public float floatParam; [Space] [Range(0.0f, 1.0f)] public float InjectPosition; public UnityEngine.AnimationEvent GetAnimEvent(float total_length) { UnityEngine.AnimationEvent AnimEvent = new UnityEngine.AnimationEvent(); AnimEvent.time = total_length * InjectPosition; AnimEvent.functionName = FunctionName; AnimEvent.intParameter = intParam; AnimEvent.stringParameter = stringParam; AnimEvent.floatParameter = floatParam; return AnimEvent; } } [SerializeField] InjectEvent[] inject_events; Dictionary<string, AnimationClip> clip_index = new Dictionary<string, AnimationClip>(); public void Inject( Animator target_animator ) { clip_index.Clear(); if (target_animator != null) { RuntimeAnimatorController runtime_ctrl = target_animator.runtimeAnimatorController; AnimationClip[] clips = runtime_ctrl.animationClips; foreach (var clip in clips) { clip_index[clip.name] = clip; } foreach (var injectE in inject_events) { AnimationClip clip = null; clip_index.TryGetValue(injectE.TargetClip, out clip); if (clip != null) { clip.AddEvent(injectE.GetAnimEvent( clip.length )); Debug.Log("Event injected for command " + injectE.stringParam ); } else { Debug.Log( "<color=red> Clip with name "+ injectE.TargetClip + " is not exist! </color>"); } } target_animator.Rebind(); } }}
注意1:需要手动调用Inject函数进行初始化
注意2:Inject Position 是时间百分比,程序会换算成秒,并且给AnimationEvent.time赋值,我个人认为这样做最方便,但是如果你希望填精确时间可以自己调节一下代码。
阅读全文
1 0
- Unity 动态为AnimationClip 注入事件的小工具类
- 制作unity小工具 获取FBX模型里面的AnimationClip片段
- UNITY 用于打点统计的小工具
- Unity小工具推荐
- unity AnimationState和animationclip的区别
- 一个简单的检查事件丢失的小工具
- pdf转换为word的小工具,挺不错的
- android 自己总结的小工具类
- android系统的 一些小工具类
- 请求网络资源的小工具类
- 方便的小工具
- xorg的小工具
- 有意思的小工具
- 整理的小工具
- 实用的小工具
- 小工具的使用
- IP地址TXT格式转换为MDB的小工具
- 为促进工作效率写的小工具,公开源码
- VS2012编译boost1.53
- Android 函数绘画思路 Y=sinX 绘制过程;
- NotePad++快捷键总结
- 泛型注入
- zookeeper配置文件
- Unity 动态为AnimationClip 注入事件的小工具类
- 学习视频
- 扫地机器人十大品牌及选购技巧
- 《夏目友人帐》第4季第13集--漫漫回家路
- iOS----计算某个视图在屏幕上的frame
- ABAP断点介绍
- Mac 上pycharm 添加opencv
- oracle 11g数据库的安装及服务讲解
- android stdio 使用butterknife的方法