C# Unity Raycast忽略LayerMask

C# Unity Raycast忽略LayerMask,c#,unity3d,layer,C#,Unity3d,Layer,出于某种原因,我的光线投射会命中位于另一层中的对象 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,

出于某种原因,我的光线投射会命中位于另一层中的对象

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;
}

private int obstaclelslayermask=(1此外,为了补充上述答案,我还发现了一些据我所知不起作用的东西

您似乎正在将
obstaclesLayerMask
放在
Physics.Raycast的distance参数中

以下是所有参数:

  • 原点:光线在世界坐标中的起点

  • 方向:光线的方向

  • maxDistance:光线应检查碰撞的最大距离

  • layerMask:在投射光线时用于选择性忽略碰撞器的层遮罩

  • 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))
    

    谢谢,这解决了问题,我感到困惑,因为在Linecast中,您不必在掩码之前放置距离参数,但在这里您可以。很好,我在这里回答的第一个问题哈哈,它也在unity API中,位于: