Physics2D.Raycast随机返回null

时间:2018-12-05 22:53:36

标签: unity3d

我有一块装有细胞的木板,有些是正常的,有些是墙壁。我想在两点之间设置一条线,然后知道它是否与墙单元碰撞。

这是我的代码:

private void OnDrawGizmosSelected()
{
    RaycastHit2D raycast = Physics2D.Raycast(from, to, Vector2.Distance(from, to), layerMask);
    if (raycast.collider == null) { Gizmos.color = Color.green; Gizmos.DrawLine(from, to); }
    else { Gizmos.color = Color.red; Gizmos.DrawLine(from, to); }
}

它有80%的时间有效。在地图的某些位置根本无法使用。

可以的示例

Example when it's OK

在这种情况下还可以,但是如果我在右下角向下滑动约0.2,则它不再起作用。

不正常的示例

Example when it's not OK

我的线像没有墙壁一样通过绿色。

我已经在墙上的单元格上设置了BoxCollider2D和我的图层。

1 个答案:

答案 0 :(得分:1)

here中的第二个参数是“方向”,而不是光线的尽头(不同于Physics2D.Raycast(),您正在正确地调用它,因为它确实是 使用开始和结束作为参数)。您想要这样的东西:

Vector2 direction = to - from;
Physics2D.Raycast(from, direction.normalized, direction.magnitude, layerMask);

您的if语句中也有一些重复的代码可以清除:

Gizmos.Color = (raycast.collider == null) ? Color.green : Color.red;
Gizmos.DrawLine(from, to);
相关问题