大家好,
我正在开发一个自定义碰撞系统,它依赖于大量的射线检测,尤其是在移动实体的每个角落(游戏是从侧面观察的,不是从上方)。然而,在此过程中,我遇到了一个奇怪的问题。 我想检查我的下降碰撞检测是否与它击中的表面垂直,以免在降落时“摩擦”墙壁并重置垂直速度。这在某些原因上在右侧的墙壁上工作,但在左侧的墙壁上却不行。以下是相关代码片段:
hit1 = Physics2D.Raycast(brCorner + new Vector2(hSpeed, 0f), new Vector2(0, -1), -vSpeed + 0.1f, myMask);
hit2 = Physics2D.Raycast(blCorner + new Vector2(hSpeed, 0f), new Vector2(0, -1), -vSpeed + 0.1f, myMask);
Debug.Log(Mathf.Atan2(hit1.normal.y, hit1.normal.x) * Mathf.Rad2Deg);
Debug.Log(Mathf.Atan2(hit2.normal.y, hit2.normal.x) * Mathf.Rad2Deg);
if (hit1.normal.y != 1 && hit1)
{
hit1 = new RaycastHit2D();
}
if (hit2.normal.y != 1 && hit2)
{
hit2 = new RaycastHit2D();
}
hit1 = Physics2D.Raycast(brCorner + new Vector2(hSpeed, 0f), new Vector2(0, -1), -vSpeed + 0.1f, myMask);
hit2 = Physics2D.Raycast(blCorner + new Vector2(hSpeed, 0f), new Vector2(0, -1), -vSpeed + 0.1f, myMask);
抱歉我写这个代码的方式有点混乱。射线检测是通过水平速度(hSpeed)偏移来避免角落碰撞,但我怀疑这并不重要。brCorner 和 blCorner 分别是碰撞盒的下右角和下左角。无论如何,Debug 日志在跳跃进入右侧墙壁时偶尔正确返回 0 度(但偶尔会返回 90 度),但在跳跃进入左侧墙壁时几乎总是返回 90 度,导致跌落速度被阻塞。 我在空中检查这一点,确保它在墙壁的中心位置,避免了误判。 我不知道这种情况会发生。所有帮助都是欢迎的。 如果需要更多代码上下文来解决这个问题,请告诉我。
评论 (0)