Physics2D.Raycast 没有找到任何东西

Physics2D.Raycast doesn't find anything

我正在为我的敌人计算一个视锥,如果玩家在其中,我会尝试用 Physics2D.Raycast 检查他们之间是否有对撞机,以确保敌人有看不到玩家穿墙。

看不透的墙壁来自网格,并附有网格碰撞器 - see this pic。它们也在特定层上,我试图将我的 Raycast 限制在该层上。

我的代码非常简单。如果敌人正对着玩家,并且玩家足够近,则发射光线投射。

if (distanceToPlayer < viewDistance && dirToPlayer == dir) {
    // player is in cone, check for collision
    LayerMask lm = LayerMask.NameToLayer ("WallCollisions");

    RaycastHit2D hit1 = Physics2D.Raycast(transform.position, (player.transform.position - transform.position).normalized, 1000, lm.value );
    RaycastHit2D hit2 = Physics2D.Linecast (transform.position, player.transform.position); 

    return true;
}

当打破 return 语句来检查命中时,它总是看起来像这样:

{UnityEngine.RaycastHit2D}
centroid: {(0.0, 0.0)}
collider: (null)
distance: 0
fraction: 0
normal: {(0.0, 0.0)}
point: {(0.0, 0.0)}
rigidbody: (null)
transform: (null)
Non-public members:

这意味着什么都没找到。

另外请注意,图中的守卫被网格包围着,也就是说无论方向如何,在指定的距离内都应该有命中..

我看到很多人对他们的 LayerMasks 进行字节移位,但模仿他们的并没有帮助,坦率地说,我不明白它会怎样。

现在已经解决了。为了将来提供帮助,网格对撞机是 3D 的,因此 Physics2D 光线投射将找不到它。使用多边形对撞机解决了所有问题。