关于unity3d动画设置参数延迟的问题
关于unity3d动画设置参数延迟的问题
gametodoN 发表于3个月前
关于unity3d动画设置参数延迟的问题
  • 发表于 3个月前
  • 阅读 26
  • 收藏 0
  • 点赞 0
  • 评论 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值去进行比较,这样效率就会高很多了。

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

共有 人打赏支持
粉丝 4
博文 6
码字总数 3935
×
gametodoN
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: