我正在为我的敌人计算一个视锥,如果玩家在其中,我会尝试用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进行字节转换,但是模仿他们没有帮助,坦率地说我不明白它是怎么回事。
答案 0 :(得分:0)
现在已经解决了。为了将来的帮助,网格对撞机是3D,所以Physics2D光线投射将找不到它。使用多边形对撞机解决了所有问题。