Unity中的Layers一共有32个,索引用0到31表示。
Raycast(…)函数public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask)
{
return Raycast(ray.origin, ray.direction, out hitInfo, maxDistance, layerMask, QueryTriggerInteraction.UseGlobal);
}
| ray | 光线的起点和方向 |
|---|---|
| hitInfo | 如果返回 true,则 hitInfo 将包含有关最近的碰撞体的命中位置的更多信息 |
| maxDistance | 射线应检查碰撞的最大距离 |
| layerMask | 层遮罩,用于在投射射线时有选择地忽略碰撞体 |
int layerMask; layerMask = 1 << 指定检测的层级; layerMask = 0 << 忽略检测的层级;代码示例
int layerMask;
void Start()
{
layerMask = 1 << 0; //此时指定检测第0层
layerMask = (1 << 1) | (1 << 2); //此时指定检测第1、2层
layerMask = 1 << 3; //此时指定检测第3层
layerMask = ~layerMask; //取反操作,此时可检测除第3层以外所有层
layerMask = (1 << 4) | (1 << 5); //此时指定检测第4、5层
layerMask = ~layerMask; //取反操作,此时可检测除第4、5层以外所有层
layerMask = (0<<1); //指定忽略第1层,注意:此时不检测任何层
layerMask = ~layerMask; //取反操作,可检测所有层
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit;
if (Physics.Raycast(ray, out raycastHit, 10000, layerMask))
{
//输出为2进制数,每一位的0或1对应所在layer层级是否能被检测到
Debug.Log("检测到:" + Convert.ToString(layerMask, 2));
}
}
}
根据层级索引获取层级名
public static extern string LayerToName(int layer);
//调用方法 string layerName = LayerMask.LayerToName(0);根据层级名获取层级索引
public static extern int NameToLayer(string layerName);
//调用方法
int layerIndex = LayerMask.NameToLayer("Default");



