Unity 中層的運用

彭然心跳發表於2018-06-20

 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));
            }
        }
    }

 

相關文章