【Unity 知识】设置射线检测层级,Physics.Raycast的layerMask含义

本文介绍了Unity中如何使用Physics.Raycast进行射线检测,并详细解释了如何通过layerMask参数来排除或指定特定层级的物体进行检测,确保射线检测能够准确达到预期效果。示例代码展示了如何设置和取反layerMask,以及在Update函数中根据用户输入进行射线检测的操作。

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

射线检测我们经常使用,可以得到射线碰撞检测到的信息。

Physics.Raycast(Ray ray, out RaycastHit hitinfo, float maxDistance)

但如果有些物体并不需要被射线检测,但它显示在需要被射线检测物体之前,并且还拥有碰撞体,会导致射线检测无法达到我们预期的效果。

我们就需要用到他的第四个参数layerMask。

Physics.Raycast(Ray ray, out RaycastHit hitinfo, float maxDistance,
int layerMask)

layerMask用于设置可以被射线检测的层级。

使用方法

int layerMask = 1 << 1; //表示允许检测第一层Layer。
layerMask  += 1 << 2 ; //增加允许检测第二层Layer。
layerMask  |= 1 << 3 ; //增加允许检测第三层Layer。
layerMask  |= 1 << LayerMask.NameToLayer("Cube"); //增加允许检测名为“Cube”的层级。

增加层级使用 | 或者 + 都可以。标号数字可以直接使用数字,也可以通过LayerMask.NameToLayer来获取。

也可以使用**~**进行取反。

完整代码:

layerMask = ~LayerMask; //取反,表示允许检测除1、2、3的其它层级。
	int layerMask;
	void Start()
	{
		layerMask = 1 << 1; //表示允许检测第一层Layer。
		layerMask  += 1 << 2 ; //增加允许检测第二层Layer。
		layerMask  |= 1 << 3 ; //增加允许检测第三层Layer。
		layerMask = ~LayerMask; //取反,表示允许检测除1、2、3的其它层级。
	}
    void Update () 
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            //可以检测到除1、2、3的其它层级
            if (Physics.Raycast(ray, out hit, 10000, layerMask)
            {
          
            }
        }
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真鬼123

祝你节节高升岁岁平安越来越漂亮

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值