文档章节

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

g
 gametodoN
发布于 2017/08/16 23:36
字数 746
阅读 77
收藏 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
【Unity3D基础概念】给初学者看的Unity概览(一):GameObject,Compoent,Time,Input,Physics

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

王选易
2014/05/29
0
0
Unite Beijing 2018|行业应用精彩议题曝光

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

weixin_41849687
04/20
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
精灵动画Animation对话框组成Idle动画的各精灵

精灵动画Animation对话框组成Idle动画的各精灵 1.3 精灵动画 场景中已经添加了精灵,现在是时候让让它动起来了。读者也许已经从精灵图集中,各精灵的命名中看出来了,这个精灵一共有两种动画...

大学霸
2015/01/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部