注: 0为关闭;1为开启
(1)开启多个层
LayerMask mask = 1<<2|1<<8;表示开启Layer2和Layer8,中间用“|”连接
(2)关闭多个层
LayerMask mask = 0<<3|0<<7;表示关闭Layer3和Layer7,
解释:
~(1 << 8) 打开除了第8之外的层。
~(1 << 0) 打开所有的层。
特别说明:LayerMask.GetMask(“UI”)等价于开启UI层
Debug.LogError("getMaskUI =" + LayerMask.GetMask("UI"));
打印结果为:getMaskUI = (2的5次方) = 32 ; UI的层级是5;
实际的意义等价于【1<<5】
public void MoveMent()
{
if (Input.GetMouseButtonUp(1))
{
var ray = cameraMain.ScreenPointToRay(Input.mousePosition);
//方式(1) 1<<10 | 1<<11 同时开启10层和11层
if (Physics.Raycast(ray, out var hit,1 << 10 | 1<<11))
{
foreach (var item in SelectedSoliderList)
{
item.SetDestnation(hit.point);
}
}
// 方式(2)同时开启10层和11层
LayerMask mask = 1 << 10 | 1 << 11;
if (Physics.Raycast(ray, out var hit1, mask.value))
{
foreach (var item in SelectedSoliderList)
{
item.SetDestnation(hit.point);
}
}
//实际应用(1) NameToLayerUI==5
Debug.LogError(" NameToLayerUI=" + LayerMask.NameToLayer("UI"));
//实际应用(2) LayerToNameUI=UI
Debug.LogError(" LayerToNameUI=" + LayerMask.LayerToName(5));
//实际应用(3) getMaskUI = (2的5次方) = 32 ; UI的层级是5;
Debug.LogError("getMaskUI =" + LayerMask.GetMask("UI"));
if (Physics.Raycast(ray,out var hit2,1<<LayerMask.NameToLayer("UI")| 1<< LayerMask.GetMask("Ground")))
{
}
}
}