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

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

        今天在写动画状态过度的时候发现的一个问题,比如我们要做取消技能(动画)后摇时候可能会遇到,比如现在我们有两个动画状态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值去进行比较,这样效率就会高很多了。

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

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看