先说说发现这个坑的由来,本人最近在做一款ACT战斗框架,需要用到人物的状态模式,在动画合适的时候插入动画通知依次来改变人物的状态。播放动画采用的是Montage Play
这个节点。于是在某次测试中发现人物当前并没有到达重置状态(需要动作播放完成才会重置)的时候就重置了。最后查找了近半天的时间,最后把问题锁定在Montage Play
这个节点上!
就是这货!!!
会发现他有一个Stop All Montages
的属性,默认是勾上的。从字面意思看是停止播放的蒙太奇以外的蒙太奇。难道紧紧是这样么?
这里我再来理一下,播放蒙太奇其实有三个以上的节点分别是:Play Montage
该节点只能在事件中调用,因为是有时间的概念,所以不能用在任何无时间观念的地方上,例如函数,宏。Play Montage
以及 Play Anim Montage
,可以发现两者最主要的差异就是这个Stop All Montages
!
我们言归正传,Stop All Montages
紧紧是是取消播放蒙太奇这么简单么?当时我锁定该节点后,便进行了测试,取消了Stop All Montages
的勾选,不出所料,问题解决了。因为我的重置状态是在动画蒙太奇用通知设定的。于是猜想Stop All Montages 不紧紧停止了播放蒙太奇,还把蒙太奇中附带的所有通知一并调用了End事件!
接下来便开始实验:
创建一个用于测试的NotifyState
:
在通知中覆盖Begin和End事件:
这两个函数的作用就是,通知开始时打印NotifyBegin
,通知结束时打印NotifyEnd
。
随后在播放的蒙太奇中绑定该通知。
随后在事件图表中,用以下蓝图进行Dubbger。
首先取消Stop All Montages
进行实验
可以开出播放的时间时正确的。Notify有被正确打印。
接下来勾选Stop All Montages
结果就是Stop All Montages 取消播放蒙太奇的同时,会取消该蒙太奇中所有的通知!
建议大家以后播放蒙太奇还是多用用Play Anim Montage
这个节点,解决这个Bug花费了我太多的精力,并且官方也没有很好的文档。
以下是官方文档对该节点的解释。。。。
看得我想好好问问他们的编写文档的人,这也能叫文档啊????