问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity Layer系统详解:从基础概念到实战应用

创作时间:
作者:
@小白创作中心

Unity Layer系统详解:从基础概念到实战应用

引用
CSDN
1.
https://m.blog.csdn.net/qq_30144243/article/details/136832997

在Unity游戏开发中,Layer系统是一个非常重要的概念,它可以帮助开发者更高效地管理场景中的各种对象。本文将详细介绍Layer的基本概念、添加方法、原理,以及在射线检测、灯光、相机、碰撞检测等场景中的具体应用。

1.什么是Layer?

在游戏开发中,尤其是在场景比较复杂的情况下,我们需要使用Layer来对场景中的对象进行分类。例如:

  • 排除不被灯光照亮的Layer
  • 射线检测特定的 Layer
  • 摄像机只能看到某些 Layer
  • 对象之间的碰撞检测 Layer

2.添加Layer

方法一:在Inspector面板中添加

在Inspector面板中点击 Layer / Add Layer

方法二:在编辑器菜单中添加

在编辑器菜单中,选择Edit / Project Settings / Tags and Layers

3.Layer的原理

Layer实际上是一个int32数值,int32是一个32位的二进制数,因此Unity的Layer系统设置了32个Layer(从0到31)。每个Layer对应一个二进制位,0表示启用,1表示禁止。每个Layer对应的数值就是2的N次方。

例如,UI层排在第5位,那么UI的Layer值就是2的5次方,即32。

4.代码设置Layer

可以通过以下代码设置对象的Layer:

// 根据名称获取Layer
int Layer_UI = LayerMask.NameToLayer("UI");
// 设置对象的Layer为UI
gameObject.layer = Layer_UI;

5.Layer用法:射线检测指定层

下面是一个使用Layer进行射线检测的例子:

// 指定第4层和第5层
int layers = (1 << 4) | (1 << 5);
// 忽略第4层
//int ignoreLayers = ~(1 << 4);
// 射线检测layers层
Ray mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitdist;
if (Physics.Raycast(mouseRay, out hitdist, 100, layers))
{
    // 处理检测结果
}

6.Layer用法:灯光照亮指定层

在场景中新建一个Cube,Layer设置为Npc
在场景中新建一个Capsule,Layer设置为Player
在场景中新建一个Directional Light

修改灯光的颜色为红色(方便测试)
修改灯光的Culling Mask为Player

结果如下,Capsule的Layer为Player,可以接受光照。

7.Layer用法:相机可见指定层

修改摄像机的Culling Mask为Npc

结果如下,Cube的Layer为Npc,所以Game试图只能看见Cube。

8.Layer用法:碰撞检测

碰撞检测需要在Edit / Project Settings / Physics中设置可碰撞层
打 √ 代表两个层之间是可以发生碰撞检测的

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号