关于骨骼动画播放时,tranfrom被重置问题

cocos的骨骼动画(包括动画图),在播放动画时,会把所有骨骼节点的position、rotation、scale在每一帧都修改,包括那些没有关键帧修改的节点。
比喻:我有一个机甲,下半身是腿,上半身是炮,下半身有idle,move动画,上半身有attack动画。idle跟move并不会修改上半身节点。而上半身需要程序在攻击敌人时,做上半身旋转,这个程序代码的旋转骨骼节点并没有关键帧,但还是会被动画强制修改。
(PS. Unity就没问题)建议官方人员看一下。

在 lateUpdate 里试试呢?

目前就是在lateUpdate里面每帧去把上半身旋转修改回来,但这里又出现新的问题,就是上半身攻击时,会在动画中使用动画事件来触发攻击事件,然后在事件回调中获取上半身两个炮口绑点位置,结果是错误,因每一帧的动画都坐把骨骼节点的旋转重叠了。
(付上个机甲截图)
image

你要不要尝试 用 上下半身分离的做法播放动画呢? Animation Mask

请问可以吗说详细一点,是使用动画图来做,然后然后Animation Mask把上半身要旋转的骨骼节点给标出来,不参与混合,是这样子吗?
如果是分成两从此动画来做,也很麻烦,因为机甲跟小兵都是使用相同的动画控制,分成两个动画,就得单独为这个机甲写特殊代码。

动画还是一个 你可以分上下半身分别播放,是动画图做的 你可以先看看文档。看看能不能满足你的需求。

文档在这里: 动画遮罩资源 · Cocos Creator

动画图我知道,也用过,unity的animator我也用过。我只觉得为了解决这个骨骼动画播放,会重置没有关键帧节点的问题,而花费更多时间,使用无法通用的方法来解决,是不好的,建议官方可以重视一下这个问题。

这个我们可能后面会加个选项。之前我们遇到过一个模型两个动画,动画A依赖它的某个节点是固定的常数,动画B会让这个节点一直动。然后播放完B,A的效果就错乱了。所以我们会给模型的所有没动画的节点都加一帧动画。

这边建议绕过去的做法是在动画组件运行之前,把不需要动画的节点的transform保存下来,每帧恢复

终于了解到你们的初衷了,个人实际问题应该针对解决,不建议通过覆盖其它功能来解决,建议你们后续看看有没有其它的解决方案。
同时也感谢你提供的暂时解决方案。