出于某种原因,我的射线投射击中了另一层中的对象。
private int obstaclesLayerMask = (1 << 11) | (1 << 12);
private Vector3 GetPointOfContactNormal()
{
Ray ray = new Ray(transform.position, transform.forward);
if (Physics.Raycast(ray.origin, ray.direction, out hit, obstaclesLayerMask))
{
Debug.Log(hit.collider.gameObject.name);
return hit.normal;
}
return Vector3.zero;
}
我曾尝试将layerMask更改为随机图层,甚至未指定为1 << 30的图层,并尝试使用LayerMask.GetMask()代替,但是raycast仍然会命中对象。仅将layerMask设置为默认图层,例如1 << 0,使raycast忽略碰撞。
LayerMask
参数用于忽略该层对象的碰撞。因此,它自然会记录所有其他层的匹配。
若要仅忽略特定的图层,则必须使用取反位运算符。
//Negate the bitmask to invert the layer mask
obstaclesLayerMask = ~obstaclesLayerMask;