使用代码给Unity中的动画片段绑定回调函数
在制作动作游戏的时候,需要播放许多动画,同时还有个需求,那就是动画播放到一定时间时,给一个回调函数,好做对应的状态变更,
我查了一下,发现如果使用的是unity自带的动画系统,要做到这样的话,需要这样做:
public void AddCallBackOnClip(Type classType,AnimationClip clip,string callbacMethod,int callBackFrame,string sParam="",int iParam = ,float fParam = 0f)
{
if (string.IsNullOrEmpty(callbacMethod)||clip==null)
{
return;
}
else
{
var methodByName = classType.GetMethod(callbacMethod); if (methodByName==null)
{
Debug.LogError(string.Format("在{0}类中,找不到名为{1}的方法", classType.Name, callbacMethod));
return;
}
else
{
var timer =Time.deltaTime*callBackFrame; Debug.Log("timer=" + timer); if (timer>clip.length)
{
return;
} AnimationEvent evt = new AnimationEvent(); evt.functionName = callbacMethod;
evt.intParameter = iParam;
evt.floatParameter = fParam;
evt.stringParameter = sParam; evt.time = timer; clip.AddEvent(evt);
}
}
}
通过以上代码可以看到,其实对于绑定回调函数,是传入的回调函数名字,而并没有使用类似于C#委托一类的东西,那么问题来了,这个只是传入方法的名字的字符串,到底是怎么确认到底该绑定哪个类里面的方法呢?
通过实验,我发现是这样子的,对于上面给出的一个绑定方法,是在哪一个Mono脚本中调用,就会去绑定哪一个Mono脚本中对应的方法。
举个例子,假设 物体Go上挂了脚本 A和脚本B,两个都拥有一个叫做PrintMsg()的方法,工具类C 中实现了 AddCallBackOnClip()方法
那么现在在脚本A 中调用 AddCallBackOnClip() 方法,最后的结果是, A 和B 中的PrintMsg均会被调用,并且无论PrintMsg()是公有的还是私有的。
这就很坑爹了!所以在使用Unity的这个功能时一定要小心,不然就很容易不知道问题出在哪儿了。
除却上述坑爹的地方之外,还有一个小小的问题,那就是可以看到,事件回调只能通过指定 时间 来绑定,而不能通过指定 动画具体帧数来绑定,
这样出现的问题是,可能不会那么精确,会存在一些小小的误差。不过这一点,相对来说是可以接受的。
使用代码给Unity中的动画片段绑定回调函数的更多相关文章
- unity中的动画制作方法
Unity中的动画制作方法 1.DOTween DoTween在5.0版本中已经用到了,到官网下载好插件之后,然后通过在项目中导入头using DG.Tweening;即可. 一些常用的API函数 D ...
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...
- 原生js判断css动画结束 css 动画结束的回调函数
原文:原生js判断css动画结束 css 动画结束的回调函数 css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画是否结束:即使是采用CSS技术生成动画效果,Jav ...
- 关于Unity中Mecanim动画的动画状态代码控制与代码生成动画控制器
对于多量的.复杂的.有规律的控制器使用代码生成 动画状态代码控制 1:每个动画状态,比如进入状态,离开状态, 等都有可能需要代码来参与和处理,比如,进入这个动画单元后做哪些事情,来开这个动画单元后做哪 ...
- (转)Unity3d使用心得(1):ModelImporter的使用、在代码中添加动画片段。
在使用 Unity3d 倒入Fbx模型的时候,动画的动画片段需要自己手动添加模型多了以后会是一个不小的工作量. Unity3d支持 编辑器脚本来控制资源导入的过程.添加一个 AssetPostproc ...
- Unity中的动画系统和Timeline(3) 混合树和动画匹配
混合树 前面我们通过在Animation界面添加单独的动作来控制动画,这样做比较麻烦,每个单独的属性,比如站立,奔跑等,都需要单独的代码来控制.现在我们可以通过使用混合树,其基本思想是将相近的动画混合 ...
- C#中委托、事件和回调函数的理解
在C#中我们经常会碰到事件,尤其是在WPF或者WinForm中,窗体加载.或者点击一个按钮,都会触发事件.实际上,事件是对委托的封装.如果不进行封装,让委托暴露给调用者,调用者就可以把委托变量重新引用 ...
- JavaScript ES7 中使用 async/await 解决回调函数嵌套问题
原文链接:http://aisk.me/using-async-await-to-avoid-callback-hell/ JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题.以往在浏览器中, ...
- 原生js判断css3动画过度(transition)结束 transitionend事件 以及关键帧keyframes动画结束(animation)回调函数 animationEnd 以及 css 过渡 transition无效
上图的 demo 主要讲的 是 css transition的过渡回调函数transitionend事件: css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画 ...
随机推荐
- ios数组基本用法和排序大全
1.创建数组 // 创建一个空的数组 NSArray *array = [NSArray array]; // 创建有1个元素的数组 array = [NSArray arrayWithObject: ...
- python flask构建小程序订餐系统--centos下项目开发环境的搭建
1.项目开发环境的搭建(Linux环境) 1)软件的安装 我们搭建整个项目的过程中,我们需要用到下面的一些软件,但是这些软件的安装过程我们在这里不用说明.(因为windows软件的安装比较的简单,类似 ...
- 入门python有什么好的书籍推荐?纯干货推荐,你值得一看 python基础,爬虫,数据分析
Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...
- 10、Strategy 策略模式 整体地替换算法 行为型模式
1.模式说明 策略模式比较好理解,就是将程序中用到的算法整体的拿出来,并有多个不同版本的算法实现,在程序运行阶段,动态的决定使用哪个算法来解决问题. 2.举例 排序算法的问题,假如我们的程序中需要对数 ...
- Docker 阿里镜像
Docker 配置阿里镜像 Dokcer 拉取镜像非常慢,配置阿里镜像加速. 步骤 首先注册阿里云,找到 "容器镜像服务" --> "镜像加速器" ,复制 ...
- java_内部类、匿名内部类的使用
内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类. 内部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法内 成员内部类 ...
- 5.深入k8s:StatefulSet控制器
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在上一篇中,讲解了容器持久化存储,从中我们知道什么是PV和PVC,这一篇我们讲通过Sta ...
- POW共识机制原理及优缺点
PoW共识机制 POW工作量证明(英文全称为Proof of Work)在比特币之前就已经出现,中本聪在设计区块链的共识机制的时候就是借鉴了POW工作量证明.常见的是利用HASH运算的复杂度进行CPU ...
- Java学习书籍与社区
编码规范:<阿里巴巴Java开发手册> 技术架构:<大型网站技术架构核心原理与案例分析>---李智慧 Spring架构与设计原理解析:<Spring技术内幕深入解析Spr ...
- 剑指Offer——II平衡二叉树
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...