我有一块装有细胞的木板,有些是正常的,有些是墙壁。我想在两点之间设置一条线,然后知道它是否与墙单元碰撞。
这是我的代码:
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%的时间有效。在地图的某些位置根本无法使用。
可以的示例
在这种情况下还可以,但是如果我在右下角向下滑动约0.2,则它不再起作用。
不正常的示例
我的线像没有墙壁一样通过绿色。
我已经在墙上的单元格上设置了BoxCollider2D和我的图层。
答案 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);