传送门设置同步 Y 轴位置无效

当关闭 Y 轴同步并在地面层级进入传送门时,过渡效果正常。

当关闭 Y 轴同步并在地面以上层级进入传送门时,玩家会在新场景中于地面层级进行过渡,这并非预期效果。

当在 Y 轴任意位置开启“同步 Y 轴位置”并进入传送门时,场景过渡会发生,但玩家并未出现在传送门的预期位置或前一场景的 Y 轴位置附近,这同样不符合预期。

我完全准备好接受可能是我操作有误。但我已遵循所有教程和此处帖子的建议,问题仍未按预期解决,因此我只能认为这是存在漏洞。如果能提供该功能的最新详细说明或替代方案,那就太好了。

谢谢!

我想我知道问题所在了!经过一些测试,我认为你的 PortalCollision 变换没有归零。Y 轴同步读取的是 Portal 的变换,而不是 PortalCollision 的,因此如果这两者不对齐,就会导致出现意外的生成位置。

请将 PortalCollision 的变换重置为相对于 Portal 的 0,0。之后,当你需要在场景中重新定位 Portal 时,请点击 Portal 节点上的“锁定子对象”按钮,以免误选碰撞体,然后从那里进行拖动。

我制作了一个简短的视频来演示该过程:
agm.windows.editor.x8664sYNL9VmVGa|视频

1 个赞

感谢回复!不幸的是,我已经尝试过这种方法,并多次调整了 Portal(传送门)和 Portal Collision(传送门碰撞体)的位置,但都无济于事。

我注意到传送门与玩家碰撞盒之间存在一种行为:玩家的碰撞盒底部似乎总是与目标位置的传送门 + 标记对齐。这导致玩家在传送时总是出现“掉落”的效果。

无论如何,无论传送门 + 标记位于何处,使用 Sync Y(同步 Y 轴)仍然会导致功能失效。到目前为止,实现我预期效果的唯一方法是,在两个位置堆叠多个玩家尺寸的传送门,使玩家在进入下一场景时的高度与离开前一场景时的高度相对一致(即像跳入下一场景一样)。

如果我理解错了请纠正我,但 Sync Y Position(同步 Y 轴位置)不正是应该做这件事的吗?我可能正在尝试超出其预期参数范围的操作,因为我使用的是一个相当高且窄的传送门碰撞体。我认为这不应该有影响,除非 Y 轴位置计算存在编辑器中看不见的限制参数。我真的不确定。

我目前的解决方案已经能满足需求,所以这方面没问题。我可能需要进一步了解 Portal Node(传送门节点)的功能。我看了你关于这个主题的视频,那让我入门了,但你的示例是在俯视视角环境中,所以我不得不在自己的项目中做一些实验。

如果我确实发现了一个 bug,很高兴能反馈给你;如果没有,也感谢这次学习的机会 :grin:

编辑:我忘记提到,传送后玩家动画会重复播放而不是继续播放。这是预期的行为吗?还是由其他地方管理的?

我又做了一些测试,发现要让 Sync Y 正常工作,需要正确设置几个地方。

对于你的玩家角色,CollisionShape2D 的底部应该位于物体的全局位置上,这意味着底部边缘应与编辑器中的 0,0 水平线对齐。附上的图片展示了具体的样子。这决定了玩家到达时的落点。

对于传送门本身:

  1. 确保 PortalCollision 的位置设置为 0,0,并将传送门物体本身移动到场景中你想要的位置。
  2. 为了让 Sync Y 正常工作,两个传送门的高度必须相同。如果高度不同,同步计算将不正确。我确信 PGM 也有同样的要求。
  3. 如果你还使用了 Sync X,那么两个传送门的宽度也必须匹配。

完成上述设置后,Sync Y 应该能达到你想要的效果。

关于过渡时动画重复播放的问题,你是否将玩家设置为“在场景结束后保持状态”(Keep State After Scene Ends)?当我进行过渡时,这似乎会让动画继续播放而不是重置。

1 个赞

这解决了问题!谢谢!我之前没有将碰撞的 Y 坐标保持在 0,而是手动将碰撞框的中心点 + 放置在 0。另外,也感谢那个“保持状态”复选框,我对此完全一头雾水,哈哈。

1 个赞