Unity射线检测指定/忽略多个层级
Posted Sophia_Y30
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity射线检测指定/忽略多个层级相关的知识,希望对你有一定的参考价值。
Unity中的Layers
Unity中的Layers一共有32个,索引用0到31表示。
Raycast(…)函数
public static bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance, int layerMask)
return Raycast(ray.origin, ray.direction, out hitInfo, maxDistance, layerMask, QueryTriggerInteraction.UseGlobal);
ray | 光线的起点和方向 |
---|---|
hitInfo | 如果返回 true,则 hitInfo 将包含有关最近的碰撞体的命中位置的更多信息 |
maxDistance | 射线应检查碰撞的最大距离 |
layerMask | 层遮罩,用于在投射射线时有选择地忽略碰撞体 |
参数layerMask
int layerMask;
layerMask = 1 << 指定检测的层级;
layerMask = 0 << 忽略检测的层级;
代码示例
int layerMask;
void Start()
layerMask = 1 << 0; //此时指定检测第0层
layerMask = (1 << 1) | (1 << 2); //此时指定检测第1、2层
layerMask = 1 << 3; //此时指定检测第3层
layerMask = ~layerMask; //取反操作,此时可检测除第3层以外所有层
layerMask = (1 << 4) | (1 << 5); //此时指定检测第4、5层
layerMask = ~layerMask; //取反操作,此时可检测除第4、5层以外所有层
layerMask = (0<<1); //指定忽略第1层,注意:此时不检测任何层
layerMask = ~layerMask; //取反操作,可检测所有层
void Update()
if (Input.GetMouseButtonDown(0))
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit;
if (Physics.Raycast(ray, out raycastHit, 10000, layerMask))
//输出为2进制数,每一位的0或1对应所在layer层级是否能被检测到
Debug.Log("检测到:" + Convert.ToString(layerMask, 2));
根据层级索引获取层级名
public static extern string LayerToName(int layer);
//调用方法
string layerName = LayerMask.LayerToName(0);
根据层级名获取层级索引
public static extern int NameToLayer(string layerName);
//调用方法
int layerIndex = LayerMask.NameToLayer("Default");
以上是关于Unity射线检测指定/忽略多个层级的主要内容,如果未能解决你的问题,请参考以下文章