关键点:使用LayerMask,针对Physics里检测collider的射线(raycast、OverlapSphere...)都适用
1.使用layerMask过滤层
int ignoreLayer = LayerMask.NameToLayer("IgnoreRaycast");// 获取要忽略的层
int layerMask = ~(1 << ignoreLayer);// 取反,忽略这个层if(Physics.Raycast(ray,out hit,maxDistance,layerMask))
{Debug.Log("射线击中了:"+ hit.collider.name);
}
1 << ignoreLayer 计算出该层的二进制掩码
2.只检测某些层
if(Physics.Raycast(ray,out hit.maxDistance,LayerMask.GetMask("Enemy","Player")))
{}
3.使用QueryTriggerInteraction只过滤触发器
如果只想忽略触发器(Trigger)的话
if(Physics.Raycast(ray,out hit,maxDistance,Physics.AllLayers,QueryTriggerInteraction.Ignore))
{
}
忽略 isTrigger = true 的Collider,只检测普通的碰撞体