[]使用linkSprite3DToAvatarNode绑定sprite到骨骼上,角色运动时绑定的mesh会经常抖动

如题,使用Animator.linkSprite3DToAvatarNode(boneName, sprite)来把武器绑定到手的骨骼上,当角色在原地不动时,播放循环动画没什么问题,但当角色动起来以后,武器会发生剧烈抖动。角色停下后抖动情况消失。另外,似乎持续移动较长时间(3~4秒)后,抖动情况逐渐消失。附件内是视频
 
已邀请:

w1114367261

赞同来自:

已经进行反馈!

brooshe

赞同来自:

自问自答一下,终于抽出时间来看这个问题。目前看起来抖动的原因是我往要绑定的骨骼下加了一个空的sprite3D(引擎不支持同一个骨骼绑定多个sprite3D,会报错,因此先绑个空的sprite3D,后面要绑定的都作为该节点的子节点)。由于每帧更新动画时会改变空sprite3D的matrix,但并不会同时改变其子节点的matrix,而一般考虑节点的位置是遍历树状结构,这个空sprite3D是放在scene下的,和角色处于同一层级,因此假如子节点的matrix在更新动画之前已经更新了,那么会造成子节点位置的不同步,会延迟一帧才更新到正确的位置。解决方法是把添加的这个空sprite3D作为角色的子节点,这样保证这个sprite3D的所有子节点更新位置的时候,它的matrix已经被animator更新过了,经测试完美解决此问题

要回复问题请先

商务合作
商务合作