射线检测与LayerMask

在游戏中,点击捡起物品可以说是比较常见的需求,今天这篇博文主要就其中用到的技术做一个简单的介绍:射线检测与LayerMask

首先新建场景,在场景中新建一个Cube,并在MainCameara挂上脚本,

testRayAndLayerMask.cs

using UnityEngine;

public class testRayAndLayerMask : MonoBehaviour
{

    public LayerMask layerMask;

    // Use this for initialization
    void Start ()
    {
        //layerMask = 1 << 8;
        //layerMask = 1 << LayerMask.NameToLayer("Cube");
    }

    // Update is called once per frame
    void Update () {
        if (Input.GetMouseButtonDown(0))
        {
            Debug.Log("点击");

            RaycastHit raycastHit;
            if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out raycastHit, 100, layerMask))
            {
                Debug.Log("有碰撞");
            }
            else
            {
                Debug.Log("无碰撞");
            }

        }
    }
}

添加Layer为Cube:
这里写图片描述

把Cube的LayerMask设置为Cube
这里写图片描述


先看一下运行效果:

第一种情况:
先把脚本的LayerMask设置为Nothing
这里写图片描述

运行效果(显示无碰撞)
这里写图片描述


第二种情况:
把脚本的LayerMask设置为Cube
这里写图片描述

运行效果(显示有碰撞)
这里写图片描述

先说一下原理吧:
这里Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out raycastHit, 100, layerMask),表示对点击做射线检检测,检测长度为100,检测层为layerMask,意思是只对layerMask做射线检测

第一种情况为不对任何层作射线检测,所以返回false
第二种情况为对Cube层作射线检测,所以返回true

这里的LayerMask的设置可以用代码进行设置

        //layerMask = 1 << 8;   打开下标为8的LayerMask
        //layerMask = 1 << LayerMask.NameToLayer("Cube");  打开名字为Cube的LayerMask
        //layerMask = 0 << 8;   关闭下标为8的LayerMask
        //layerMask = 0 << LayerMask.NameToLayer("Cube");  关闭名字为Cube的LayerMask

这里我提供的只是一种思路,可以想象一种场景就是:只对可以捡起的物品进行点击的射线检测,那么就可以对那些物品设置一个特定的LayerMask做射线检测。

这篇博文就到这里,我们在下一期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值