什么是最准确的方法find正确的位置,移动的角色应该被重新定位为碰撞分辨率,在它与多个碰撞体发生碰撞后?
下图说明了这种情况。 黑色的长方形是墙壁,蓝色的长方形/圆形是移动的字符,而读取的箭头表示移动的方向,即在这种情况下从右到左。 我的设置是2D,我在Unity中使用C#。
在我的角色引发的手榴弹冲突物理定义中,我遇到了类似的问题。 我find了一个可以满足您需求的解决scheme。
当一个物体(例如一个小球)沿着它的轨迹移动时,无论是否受重力影响,每一帧都会从点A移动到点B(取决于你希望的帧率,你必须处理三角时序),给我们一个暗示它的速度。 如果从A移动到B时没有发生碰撞,则根据运动学(图像中的第一种情况),将球放在新的位置。
如果至less有一次碰撞被发现,我们会发现一个位置C(我们不介意它是一个2D还是3D模型 – 它的工作原理是一样的),这是沿vectorAB的最终位置,我们的球不与其他任何东西碰撞。 虽然距离我们有一小段距离,但是我们的球应该是AB距离的,但是实际上是AC距离,这是较小的(图中的第二个例子)。 然后我们计算两个值:剩下的距离(CB = AB – AC,当使用x和y值时,您只需应用Phythagoras定理)以及我们球移动的新方向。
如果从A到B的运动是由一个脚本来计算的(情况1),那么首先在AC上然后在CB(图2)上迭代它将使球仍然按照碰撞检测行进到AB距离。 在同一条path上有更多的碰撞点不是什么大不了的,我们只是按照我们的需要迭代我们的移动脚本三,四,五次。 您可以制作此algorithm的迭代或recursion版本。
在我的个人项目中,我使用了一个迭代脚本,按顺序执行以下操作:
希望有所帮助。
编辑:如果你的对象在同一时间与两个着名的对象发生碰撞,那么把新的方向角度作为你计算的两个假设角度的vector和。