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)会使光线投射忽略碰撞。
另外,为了补充上述答案,我发现了一些据我所知不起作用的东西。
看起来你正在将obstaclesLayerMask
参数放置在距离Physics.Raycast
这些是所有参数:
原点:世界坐标中射线的起点。
方向:射线的方向。
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))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7117 次 |
最近记录: |