unity中鼠标检测指定层的物体

需要检测指定的物体,其它物体都被忽略。

此处我用LayerMask实现的。

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

如何编辑Layers.

在代码中使用时如何开启某个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。

~(1 << 10) 打开除了第10之外的层。

~(1 << 0) 打开所有的层。

(1 << 10) | (1 << 8) 打开第10和第8的层。

其它方式

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.

使用LayerMask参数

Physics.Raycast(ray, out hitInfo, 500, mask.value)或Physics.Raycast(ray, out hitInfo, 500, mask)

下面为具体实例代码,具体情况具体分析。

    //用于检测数据UI界面信息
    public LayerMask mask = 1 << (LayerMask.NameToLayer("DataUI"));//实例化mask自定义的层级之上
    private  Image image;
    void Start()
    {
     
        //添加layer和BoxCollider
        image.gameObject.layer = 15;
        image.gameObject.AddComponent<BoxCollider>().size = new Vector3(200, 200, 0);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {

            //创建射线;从摄像机发射一条经过鼠标当前位置的射线
            RaycastHit hitInfo;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);


            if (Physics.Raycast(ray, out hitInfo, 500, mask.value))
            {
                GameObject gameObj = hitInfo.collider.gameObject;
                Debug.LogError(gameObj);
                Debug.LogError(hitInfo.point);
                Debug.LogError(hitInfo.collider.transform.localPosition);

            }
            Debug.DrawLine(ray.origin, hitInfo.point, Color.red, 2);
        }
    }

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值