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,但模仿他们的没有帮助,坦率地说,我不明白这是怎么回事。
这个问题现在解决了。为了在未来提供帮助,网格碰撞器是3D的,所以Physics2D光线投射不会找到它。使用多边形碰撞器解决了所有问题