Physics2D.Raycast没有找到任何东西

时间:2016-08-14 07:59:56

标签: c# unity3d unity5 unity3d-2dtools

我正在为我的敌人计算一个视锥,如果玩家在其中,我会尝试用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:

这意味着没有找到任何东西。

另外,请注意,在pic中,守卫被网格包围,这意味着无论方向如何,都应该在指定的距离内进行击中..

我见过很多人都在对他们的LayerMasks进行字节转换,但是模仿他们没有帮助,坦率地说我不明白它是怎么回事。

1 个答案:

答案 0 :(得分:0)

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