Physics2D.Raycast没有找到任何东西

本文关键字:任何东 Raycast Physics2D | 更新日期: 2023-09-27 18:02:16

我正在计算敌人的视锥,如果玩家在其中,我会试着用Physics2D检查他们之间是否存在对撞机。光线投射,以确保敌人不会透过墙壁看到玩家。

不能被看到的墙壁是从一个网格,并有一个网格碰撞器附加-见这张照片。它们也在一个特定的图层上,我试图限制我的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中,守卫被网格包围,这意味着无论方向如何,都应该在指定的距离内命中。

我见过很多人做bytesshift到他们的layermask,但模仿他们的没有帮助,坦率地说,我不明白这是怎么回事。

Physics2D.Raycast没有找到任何东西

这个问题现在解决了。为了在未来提供帮助,网格碰撞器是3D的,所以Physics2D光线投射不会找到它。使用多边形碰撞器解决了所有问题