遇到了LTS 2026中的新浮点数系统的碰撞问题。我的玩家对象以0.5个单位的增量移动,之间每次碰撞检查。 我注意到,在某些情况下,如果我撞到左侧或顶部的墙,碰撞检查并没有正确工作,玩家会被0.5个单位挡在墙里。 https://preview.redd.it/61oxvm4j40hh1.png?width=480&format=png&auto=webp&s=e1cca109e625e53cfecf2fb39c86cf4f4d348262
一开始我很困惑为什么会这样发生。它只发生在我的初始测试中,玩家左侧的墙上,而且只在某些房间的某些墙上。 在更新到LTS 2026之前,相同的代码就能正常工作。 然后我意识到,这是因为浮点数精度问题。 进行更多的测试,我发现同样的问题会发生在玩家向北撞到墙上时,也只有在x或y方向超过+240个单位时才会发生。 低于这个阈值时,所有的碰撞检查都正常工作,没有任何重叠。 我能够通过一种hacky的方式来解决这个问题,当我使用place_meeting()检查是否移动玩家0.5个单位会碰撞时,我改为检查0.51个单位。 这个解决方案在我的测试中表现良好,但可能会在世界原点以外的位置失效。
评论 (0)