Unity Raycast 忽略 LayerMask

Den*_*nov 3 c# layer unity-game-engine

由于某种原因,我的光线投射击中了另一层中的物体。

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;
}
Run Code Online (Sandbox Code Playgroud)

我尝试将 LayerMask 更改为随机图层,即使是未指定的图层(例如 1 << 30),并尝试使用 LayerMask.GetMask() 代替,但光线投射仍然会命中对象。仅将 LayerMask 设置为默认图层(例如 1 << 0)会使光线投射忽略碰撞。

Maa*_*ers 5

另外,为了补充上述答案,我发现了一些据我所知不起作用的东西。

看起来你正在将obstaclesLayerMask参数放置在距离Physics.Raycast

这些是所有参数:

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

  2. 方向:射线的方向。

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

  4. LayerMask:图层蒙版,用于在投射光线时选择性地忽略碰撞体。

  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))
Run Code Online (Sandbox Code Playgroud)