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

的距离参数中

这些是所有参数:

  1. origin:射线在世界坐标中的起点。

  2. direction: 光线的方向。

  3. maxDistance:射线应检查碰撞的最大距离。

  4. layerMask:用于在投射光线时有选择地忽略 Colliders 的图层蒙版。

  5. 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))