Unity Raycast 忽略 LayerMask
Unity Raycast Ignores LayerMask
出于某种原因,我的光线投射击中了另一层中的对象。
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() 代替,但光线投射仍然会击中对象。只有将 layerMask 设置为默认层,如 1 << 0 才能使光线投射忽略碰撞。
除了上面提到的答案之外,我还发现了一些据我所知行不通的东西。
您似乎将 obstaclesLayerMask
放置在 Physics.Raycast
的距离参数中
这些是所有参数:
origin:射线在世界坐标中的起点。
direction: 光线的方向。
maxDistance:射线应检查碰撞的最大距离。
layerMask:用于在投射光线时有选择地忽略 Colliders 的图层蒙版。
queryTriggerInteraction:指定此查询是否应命中触发器。
如果您将参数范围更改为这样,则参数范围将是正确的:
//I put it on 300f here but just put there what you prefer.
if (Physics.Raycast(ray.origin, ray.direction, out hit, 300f, obstaclesLayerMask))
出于某种原因,我的光线投射击中了另一层中的对象。
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() 代替,但光线投射仍然会击中对象。只有将 layerMask 设置为默认层,如 1 << 0 才能使光线投射忽略碰撞。
除了上面提到的答案之外,我还发现了一些据我所知行不通的东西。
您似乎将 obstaclesLayerMask
放置在 Physics.Raycast
这些是所有参数:
origin:射线在世界坐标中的起点。
direction: 光线的方向。
maxDistance:射线应检查碰撞的最大距离。
layerMask:用于在投射光线时有选择地忽略 Colliders 的图层蒙版。
queryTriggerInteraction:指定此查询是否应命中触发器。
如果您将参数范围更改为这样,则参数范围将是正确的:
//I put it on 300f here but just put there what you prefer.
if (Physics.Raycast(ray.origin, ray.direction, out hit, 300f, obstaclesLayerMask))