gpt4 book ai didi

c# - Unity Raycast 忽略 LayerMask

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:47 26 4
gpt4 key购买 nike

出于某种原因,我的光线转换击中了另一层中的对象。

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 的 distance 参数中

这些是所有参数:

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

关于c# - Unity Raycast 忽略 LayerMask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58135605/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com