Unity3D中Layers的计算和应用

本文介绍了Unity中层掩码(LayerMask)的基本用法,包括如何开启或关闭指定层,以及通过各种方法实现对特定层的射线投射检测。此外,还展示了如何利用LayerMask.GetMask获取特定层的数值表示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Unity中用int32数据类型来表示32个Layer层,int32表示二进制一共有32位(0—31)在这里插入图片描述注: 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")))
            {

            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值