Unity-LayerMask层级和一般使用方法

LayerMask实际上是一个位码操作,在Unity3D中一共有32个Layer层,并且不可增加。
Layout设置
在Unity官方中给出的描述是:

Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collider或Collision使用。

在代码中使用时如何开启某个Layers?

LayerMask mask = 1 << 你需要开启的Layers层。
LayerMask mask = 0 << 你需要关闭的Layers层。

比如:
LayerMask mask = 1 << 2; 表示开启Layer2。
LayerMask mask = 0 << 5;表示关闭Layer5。
LayerMask mask = 1<<2|1<<8;表示开启Layer2和Layer8。
LayerMask mask = 0<<3|0<<7;表示关闭Layer3和Layer7。

上面也可以写成:
LayerMask mask = ~(1<<3|1<<7);表示关闭Layer3和Layer7。
LayerMask mask = 1<<2|0<<4;表示开启Layer2并且同时关闭Layer4.


Unity LayerMask一般用在碰撞射线检测。

+++++++++++++++++++++更新++++++++++++++++++++++++++++
射线碰撞检测相关API:

1Ray Camera.main.ScreenPointToRay(Vector3 pos) 
2Ray Camera.main.ViewportPointToRay(Vector3 pos) 
3、Ray 
4、RaycastHit 
5bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)

全部代码:

using UnityEngine;
public class LayerMaskTest : MonoBehaviour
{
    private LayerMask mask;
    private Camera mainCamera;
    private RaycastHit GbjHit;
    private Ray myRay;
    void Start()
    {
        mainCamera = Camera.main;
        mask = 1 << (LayerMask.NameToLayer("MaskName"));
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            myRay = mainCamera.ScreenPointToRay(Input.mousePosition);
            Debug.DrawLine(myRay.origin, GbjHit.point, Color.red, 2);
            if (Physics.Raycast(myRay, out GbjHit, 100, mask.value))
            {
                GameObject Gbj = GbjHit.collider.gameObject;
                Debug.Log("HitGameObjectName:" + Gbj.name + "--HitLayoutName:" + LayerMask.LayerToName(10));
            }
        }
    }
}

……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值