因此,我使用GJK来检测碰撞,并使用EPA来获得3D空间中凸多面体的碰撞检测,以获取分辨率矢量。当一个对象仅与另一个对象碰撞时,这种方法效果很好。当一个对象与多个对象碰撞时,如何处理碰撞?考虑以下情况,红色框表示玩家向右行走,而两个黑色框只是玩家可以行走的一些物体(受到重力作用,玩家会在这些物体内向下移动): 与右框碰撞的最小分辨率矢量是在直接向左的方向上,而与左框碰撞的最小分辨率矢量是在向上的方向上。由于框可以按任意顺序出现,因此首先从正确的物体上分辨玩家会导致突然停止。然后,玩家将从左边的物体上解开,向上移动。结果是玩家撞到了墙。首先从左边的对象开始缓解此问题,因为然后播放器不会与右边的对象发生碰撞。那么也许有某种不同的顺序应用分辨率矢量?
如何防止这种情况发生?我显然不希望玩家在冲水的物体上面奔跑然后突然停止。
对象和播放器也可以是3D空间中的任意凸多面体,如果播放器沿墙滑动或跳过并滑过天花板,则解决方案应该能够处理相同的情况。