LayerMask.NameToLayer("UI") ,这是直接获取场景里面已有的层,
1<<LayerMask.NameToLayer("UI"),这是在发出射线的时候只开启这一个层,
0<<LayerMask.NameToLayer("UI"),这是在发出射线的时候关闭之一层,
也可以直接把要关闭或者开启的那一层写出来比如:LayerMask mask = 0 << 3 | 0 << 7;关闭第三和第七层;
还有这种写法:
mask = (1 << 5);
mask = ~mask;
这个意思是开启所有层只关闭第五层
在做项目的时候经常会运用到射线检测但是值得注意的是射线检测分为2D和3D,
void CheckClick() { if (Input.GetMouseButtonDown(0)) { //mask = (1 << 5); //mask = ~mask; //Ray ray = UICamera.currentCamera.ScreenPointToRay(Input.mousePosition);//2D射线检测 mask = ((0 << 5) | (1<< 9)); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//3D射线检测 RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo, Mathf.Infinity, mask)) { string goname = hitInfo.collider.gameObject.name; int layer = hitInfo.collider.gameObject.layer; BwTrace.LogError("已点中了" + goname + ",layer:" + layer + "层....mask.value:" + FormatToBinary(mask.value)); } else { BwTrace.LogError("没点中 mask 层....mask.value:" + FormatToBinary(mask.value)); } } }