文档章节

关于unity3d动画设置参数延迟的问题

g
 gametodoN
发布于 2017/08/16 23:36
字数 746
阅读 96
收藏 0

        今天在写动画状态过度的时候发现的一个问题,比如我们要做取消技能(动画)后摇时候可能会遇到,比如现在我们有两个动画状态A和B,通过一个bool类型值对他们之间进行转换,当bool类型为true时从A到B,当bool类型为false时候从B到A,两个过度状态都不勾选has exit time,我们测试在Start函数里面设置bool类型为true然后用invoke函数过个0.1s去把这个bool类型设置为false,按照我们之前的设想它应该会0.1s后返回动画B,但是其实它并没有,而是有一定的延迟。我们用动画去测试,我们的动画是0.66秒,0.4秒时候会出发攻击特效,但是我不过给invoke函数多少延迟让它去设置bool类型为false ,都不会按照我们的设想返回动画A,而且每次都把攻击特效发出去了。  

        刚开始测试的时候,我是在invoke函数里面不去设置动画bool类型为false,而是直接让它Play动画A,它是可以精确的执行的,比如invoke在0.39后设置攻击特效就不触发,但是在0.41设置就会触发攻击特效。但是这种方法不是我们想要的。后来想到了Animator.StringToHash这个方法,之前并没有体会到这个方法的用处,在这里深刻理解到了它存在的意义,如果我们用Animator.SetBool这个方法去设置bool类型的状态,如果用的是string类型去判断,unity在设置动画参数的时候需要进行一个比较,我们传入的如果是字符串,需要对应到变量名,所以比较耗时,就出现了延迟的情况。如果我们事先用Animator.StringToHash的方法去给每个动画设置好hash值,在SetBool或者其他参数设置方法里面,用之前设置好的hash值去做直接的比较,效率就很快很多,经过测试,同Play()方法达到的效果一样,已经完全满足我们之前的设想。所以以后想要精确延迟的情况下,一定要使用Animator.StringToHash方法去给每个动画参数一个hash值,用hash值去进行比较,这样效率就会高很多了。

 还有个问题就是当你在同一帧时候去设置一个动画参数,让它过度到一个动画的时候,在设置完后立刻判断它的状态是否为过度到的那个动画,实际那个时候它的状态还不是你要过度的那个动画,并不是预想的立刻就能转换到你想的那个动画的,所以大家尽量避免这个问题的出现。

© 著作权归作者所有

共有 人打赏支持
g
粉丝 3
博文 6
码字总数 3935
作品 0
Unite Beijing 2018|行业应用精彩议题曝光

我们不久之前为大家提前曝光了部分大会精彩技术议题,引起了大家的广泛关注。作为世界顶尖的内容创作引擎,Unity不仅仅可用于跨平台的游戏开发,越来越多的开发者将Unity运用到制造业,汽车,...

weixin_41849687
04/20
0
0
【Unity3D基础概念】给初学者看的Unity概览(一):GameObject,Compoent,Time,Input,Physics

点击进入我的新博客 作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点推荐。谢谢! Unity3D重要模块的类图 最近刚刚完成了一个...

王选易
2014/05/29
0
0
ogre的材质与unity的材质的相似性

最近研究了火炬之光的游戏资源,这款游戏采用ogre引擎,也就促使我研究了一下ogre的材质文件格式,发现和我经常使用的unity的材质格式有很多相似之处,因此分享出来给大家。 ogre的材质文档可...

李勇2
2015/02/28
0
0
Unite Beijing 2018 | 技术专场部分精彩议题曝光

离5月11-13日的Unite Beijing 2018的开幕仅剩一个半月了,届时来自全球的Unity技术达人,行业精英和全球合作伙伴将为你带来史无前例的80余场技术演讲,内容涵盖Unity跨平台内容开发经验,标杆...

weixin_41849687
04/20
0
0
【Unity3D技术文档翻译】第3.0篇 光照总览 & 灯光

上一章:【Unity3D技术文档翻译】第2.6篇 编写着色器 (材质、着色器与纹理系列完结) 本章原文所在章节: Lighting 部分:【Unity Manual】→【Graphics】→【Graphics Overview】→【Light...

何三思
07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

同样是工作3年程序员,为什么别人每月25K你却只有15K?

你有没有静下心来思考过:同样是做了x年Java开发,为什么你的技术比别人差很多?为什么别人每月26K你却只有15K? 其实技术水平的高低和个人智商关系不大(毕竟能做Java编程开发大家都不会差)...

Java填坑之路
2分钟前
0
0
跨域问题:解决跨域的三种方案

当前端页面与后台运行在不同的服务器时,就必定会出现跨域这一问题,本篇简单介绍解决跨域的三种方案,部分代码截图如下,仅供参考: 方式一:使用ajax的jsonp 前端代码 服务器代码 使用该方...

rechardchensir
2分钟前
0
0
linux学习-1012

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 扩展 bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/...

wxy丶
3分钟前
0
0
springboot dubbo 在程序初始化完成前 使用回声测试对服务依赖检测

@Component @Order(2) public class PrkServiceInit implements ApplicationListener { private LoggerUtil logger = LogFactory.getLogger(PrkServiceInit.class); private static Applicat......

林伟琨
5分钟前
0
0
“网红架构师”解决你的Ceph 运维难题

Q1. 环境预准备 绝大多数MON创建的失败都是由于防火墙没有关导致的,亦或是SeLinux没关闭导致的。一定一定一定要关闭每个每个每个节点的防火墙(执行一次就好,没安装报错就忽视): CentOS s...

编程SHA
8分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部