【问题标题】:Unity Raycast Ignores LayerMaskUnity Raycast 忽略 LayerMask
【发布时间】:2019-09-27 13:32:20
【问题描述】:

由于某种原因,我的光线投射会击中另一层中的对象。

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

【问题讨论】:

    标签: c# unity3d layer


    【解决方案1】:

    除了上面提到的答案之外,我还发现了一些据我所知是行不通的。

    您似乎将obstaclesLayerMask 放在Physics.Raycast 的距离参数中

    这些都是参数:

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

    2. direction:光线的方向。

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

    【讨论】:

    • 谢谢你,解决了问题,我很困惑,因为在 Linecast 中你不必在掩码之前放置距离参数,但是你可以这样做。
    • 很好,我在这里回答的第一个问题哈哈,它也在统一 API 中:link
    猜你喜欢
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多