Unity3D:添加动画层使我的 2D 角色漂浮在地面上

Unity3D: Adding an animator layer makes my 2D character float above the ground

我正在用 Unity 开发一个 2D 游戏,遇到了一个无论我做什么都无法解决的问题。

我有一个玩家角色(一个 .psb 文件,分为多个层,在 unity 的蒙皮编辑器中附有骨骼)附有动画师。在动画器中,有两层——一层基础层和一层 "lantern" 层(之所以这样称呼是因为它负责在常规动画和专门为拿着灯笼设计的动画之间进行混合)。两层都设置为override,lantern层同步,权重由脚本控制

我的角色总是在第二层存在时开始逐渐向上飞,无论其设置、重量或状态动作如何。如果我删除图层,所有问题都会消失。如果我在动画师上禁用 "apply root motion",问题也会消失,但遗憾的是我需要启用它。然而,实际上没有动画修改角色的变换,只有骨骼的旋转。现在它变得有趣了:当我 运行 一个确实会修改玩家位置的动画时,在它结束后,玩家不再飞起来。

我发现的所有与此相关的主题都是关于 3D 装备的,这些装备的设置比我的 2D 动画剪辑多得多(这里只有 3 个选项...叹气),通常可以解决这个问题通过烘焙到姿势 Y(或这些行中的某些内容)或将 "Foot IK" 设置为 true 来发出问题。尽管如此,剪辑和动画师上的所有设置组合都无法解决问题(动画师状态上的 "Foot IK" 设置也没有任何改变,所以我将它们设置为禁用)。阻止我的玩家无限期向上飞行的唯一 3 种方法是:删除第二层、播放一次修改玩家位置的动画或禁用根运动。

此外,没有任何脚本会以可能导致此问题的方式修改玩家的 y 坐标(我将它们一一禁用,但没有任何区别)。

我知道这是一个非常模糊的问题,但如果我可以自己解决,我就不会在这里发帖。我没有附上任何屏幕截图或代码,因为我留下的印象是它更像是一个理论问题......而且动画师上的设置组合或剪辑无法改变任何东西,所以......:/不用say,如果有人觉得有帮助,我会很乐意去做。

提前致谢!

此致, 科乔

从默认渲染管线升级到通用渲染管线或将 Unity 更新到版本 2019.3.2f1 解决了这个问题。

编辑: 不对!一段时间后问题再次出现。该问题是由(可能是内部?)动画师更新引起的;例如,在播放模式下手动更改动画器编辑器中的状态速度时,或在代码中更改动画器状态设置时(更改动画器速度本身似乎不会引起任何问题)。我从来没有设法找到这背后的具体原因或修复它,但我找到了一个足够好的解决方法,实际上可以使问题不存在:

  1. 将“Apply root motion”设置为 true(检查器中动画组件的设置);
  2. 创建一个非常快速的动画,稍微移动玩家的位置然后重置它;每次需要修改动画师状态时,或者每次遇到此错误时,只需播放动画即可。动画移动会抵消错误,动画的速度设置得足够高时,会使它对玩家不可见。