这是我在用Mecanim(Animator)做各种音频管理时发现的一个坑。 举个例子,比如说做脚步声的播放一般都会在每个Clip上挂动画事件,但是如果你的移动动画是用的BlendTree,这个脚步声的播放就会直接炸锅。无论你的动画有没有混合到走路的片段里,只要摁一下它就能给你直接播完所有脚步声。这个问题是AudioSource.Stop()也解决不了的。 其实这个问题在Forum上被提及过非常多,解决方案也是有的。 在Unity5.x之后的版本里,AnimationEvent类中添加了名为animationClipInfo的字段,animationClipInfo.weight能返回相应被挂载动画事件的动画当前被混合的权重程度。说白了就是这个动画事件在发出之后会自主判断它本属于的那个动画有没有被播放,没播就是0,播了就是1。 有了这个东西,我们就能更好地控制blendtree中的动画事件了。举个栗子,我在混合树中的walk动画上挂载了一个名叫PlayStep的动画事件,那么接受它的函数应该是这么写的: 这样一来,混合树中的动画事件就再也不会乱套了。 |
|
来自: 勤奋不止 > 《游戏引擎unity》