Unity3D射线检测如何使用Layers和LayerMask

在Unity中用int32数据类型来表示32个Layer层,int32表示二进制一共有32位(0—31)。在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。在Unity中可编辑的Layer共有24个(8—31层),官方已使用的是0—7层,默认不可编辑!如图:
这里写图片描述 这里写图片描述

在代码中使用layers时,先了解
按位运算符:左移运算符<<,左移表示乘以2,左移多少位表示乘以2的几次幂。

在Unity中使用LayerMask时,如何正确开启某个Layer?
LayerMask mask = 1 << 你需要开启的Layers层。
LayerMask mask = 0 << 你需要关闭的Layers层。
左移运算符右端是你希望产生碰撞的层的层号,如上图我想让名为Icon的层和射线产生碰撞,代码里应该这样写:

LayerMaks mask = 1 << 11;

或者:

LayerMaks mask = 1 << (LayerMask.NameToLayer("Icon"));

射线部分的代码:

if (Input.GetTouch(0).phase == TouchPhase.Began)
{
    Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
             RaycastHit rh = new RaycastHit();
             if (Physics.Raycast(ray, out rh, Mathf.Infinity, mask.value))
{
     Log.log("碰撞体的名字:" + rh.collider.name);
 }

关于LayerMask的其他一些方法:

LayerMask.LayerToName 层转名称:

using UnityEngine;using System.Collections; 
public class ExampleClass : MonoBehaviour {   
    void Example() {        Debug.Log(LayerMask.LayerToName(1));   
  }}

LayerMask.NameToLayer 名称转层:

using UnityEngine;using System.Collections; 
public class ExampleClass : MonoBehaviour {    void Example() {        Debug.Log(LayerMask.NameToLayer("TransparentFX"));    }}

LayerMask.value 值:

using UnityEngine;
using System.Collections; 
public class ExampleClass : MonoBehaviour {    
public LayerMask mask = -1;    
void Update() {        
if (Physics.Raycast(transform.position, transform.forward, 100, mask.value))
            Debug.Log("Hit something");     }
            }

LayerMask.GetMask 获取蒙版:

using UnityEngine;
using System.Collections; 
public class ExampleClass : MonoBehaviour {    void Example() {        Debug.Log(LayerMask.GetMask("UserLayerA", "UserLayerB"));    }}

Unity中射线默认是碰到碰撞体就停止发射
关于Physics.Raycast射线投射:
这里写图片描述
Physics.Raycast(ray, out rh, Mathf.Infinity, mask_button.value)
注意第三个参数是距离,
(1)可以是10,100,2000等具体的值
(2)也可以是Mathf.NegativeInfinity负无穷,Mathf.Infinity正无穷等值

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zengxyuyu/article/details/52470335
文章标签: unity3d unity
个人分类: Unity Vuforia
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭