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 光线投射将找不到它。使用多边形对撞机解决了所有问题。
我正在为我的敌人计算一个视锥,如果玩家在其中,我会尝试用 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 光线投射将找不到它。使用多边形对撞机解决了所有问题。