Unity Raycast忽略LayerMask

问题描述 投票:1回答:1

出于某种原因,我的射线投射击中了另一层中的对象。

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忽略碰撞。

c# unity3d layer
1个回答
0
投票

LayerMask参数用于忽略该层对象的碰撞。因此,它自然会记录所有其他层的匹配。

若要仅忽略特定的图层,则必须使用取反位运算符。

//Negate the bitmask to invert the layer mask
obstaclesLayerMask = ~obstaclesLayerMask;
© www.soinside.com 2019 - 2024. All rights reserved.