【unity animator】mecanim动画系统疑难问题研究精华分享

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/poem_of_sunshine/article/details/81739547

http://tieba.baidu.com/p/3525963206

 

1、any state切换到任何状态机,都会有一个can transition to self选项,勾选此选项可以重置自身状态。


2、从a状态机,到b状态机,可以可以连接多份transition,这时候各个transition的condition都是独立的,是或的关系。


3、必须使用ExitTime,UI面板里调节相互切换的起始时间才是有意义的。如果不使用ExitTime,你就算调了过度时间,只要一做别的操作,切回来还是会给你强制回到50%的状态。


4、不管用不用ExitTime,过度时间的长短都可以手动指定。


5、不管用不用ExitTime,都可以拖动将要过度到的状态机的位置,来确定ExitTime结束的时候,进入的这个状态机动画播放的位置。(也就是说,你可以不从头开始播放动画,可以从中间可以从结尾。这样,你比如要切换一个走路到跑步的状态,你可以精确地定位动画播放的位置,走路时是左脚踩地,找准跑步动画的位置,也让他左脚踩地,无缝切换)



6、ExitTime的意思是说,到达指定的时间的瞬间,切换到其他状态机,时间早了不满足条件,时间晚了,也不满足条件,只有刚刚好到这个时间点,才满足一次条件。如果有别的判断条件,不满足的时候,ExitTime就有可能因为时间错过而不触发,要等到时间过一个循环才触发。这个时候可以使用Animator.GetCurrentAnimatorStateInfo(int layer).normalizedTime作为AC的一个float,设定时间判断条件不使用ExitTime,而是使用这个float,当它大于指定时间的时候触发。


7、在最近几个版本的unity中,默认导入的动画是24fps的(以前是30fps的)。当你把动画放在状态机里跑的时候,会按引擎的时间去跑,也就是60fps,中间差值。但是mecanim transition的预览窗口的timeline却是30fps的,虽然为什么这么设置我没搞明白,但是如果你需要极其精确地控制时间到帧,那么只要换算一下时间,是完全可以做到的。



8、atomic选项勾上,意味着当这个transition只要一开始,就必须发生完,进入下一个状态机了,才进行后续的判断,即该transition无法被打断。默认是勾上的,但是其实大多数时候的transition我们都是希望可以被别的判断条件给打断而播放别的动画的。所以我们经常要去掉atomic的勾,但是unity有这个bug,你去掉这个勾有的时候依然无法打断,这时候你就得删掉这个transition,重新再连接一次,有的时候要做两次。总之,没勾atomic就是可以被打断,打不断就是unity bug,请重连。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页