Unity中LayerMask层的规律

来源:互联网 发布:企业网站如何做好优化 编辑:程序博客网 时间:2024/06/06 07:28

using UnityEngine;using System.Collections;public class Layer : MonoBehaviour {    public int layerMask=0;  //定义一个int类型的变量,用来存储碰撞的层void Start ()    {}void Update ()    {        //从摄像机发射一条射线到屏幕上的一点,这个点我们在括号中定义的是我们鼠标点击点击的一个点        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);        //是一个结构体,用于存储射线碰撞返回的信息        RaycastHit hit;        //第一个参数是我们的射线ray,第二个参数是返回的碰撞信息,第三个参数是摄像能够碰撞到的距离,第四个参数就是我们的碰撞层  如果返回真就是执行下面的代码        if (Physics.Raycast(ray,out hit,100,layerMask))          {            Debug.Log("名字是"+hit.collider.gameObject);        }}}


在场景中建了五个物体

UIPlan                             对应的Layer层是UI;

DefaultCube                   对应的层是Default;

TransparentFXSphere     对应的层是TransparentFX;

WaterCapsule                 对应的层是Water

IgnoreRaycastCylinder   对应的层是IgnoreRaycast


当我在测试的时候输入不同的mask值得出的结果

mask                               能被射线检测到的物体

0                                      无

1        2的0次幂                DefaultCube 

2        2的1次幂                TransparentFXSphere

3        mask1+2               DefaultCubeTransparentFXSphere 

4        2的2次幂                IgnoreRaycastCylinder 

5        mask1+4               DefaultCube       IgnoreRaycastCylinder 

.....

8        2的3次幂                 无

........ 

16      2的4次幂                 WaterCapsule

....

32      2的5次幂                 UIPlan   

总结可以得出在面板中UseLayer后面跟的值可以求出对应的层  怎么知道是2的几次幂,这个几次就是面板中这个层Layer后面所跟的数值。

如果想同时检测多个层时,就把多个层的mask值相加。就可以同时检测到多个层了。

这是我今天学到的,如果有不对的地方,还请大家指正。谢谢!  

原创粉丝点击