1.什么是Layer?
我们在做游戏开发的时候,尤其是场景比较复杂的时候,我们就需要使用Layer来分类。
比如:
排除不被灯光照亮的Layer
射线检测特定的 Layer
摄像机只能看到某些 Layer
对象之间的碰撞检测 Layer
…
2.添加Layer
①在Inspector面板中点击 Layer / Add Layer

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

3.Layer的原理
Layer是一个int32数值, int32 是一个 32 位的二进制数,所以 Unity 的层也就设置了 32 个(0 ~ 31)。
先把int转成二进制数,每一位代表一个层(如下图),0代表该启用,1代表禁止,所以每个层对应的数值就是 2 的N 次方
比如 UI层排在第5位,那UI的层就是2的5次方=32

4.代码设置Layer
//根据名称获取层级,返回UI的层级4
int Layer_UI = LayerMask.NameToLayer("UI");
//设置对象层级为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设置为Palyer

在场景中新建一个Directional Light
修改颜色为红色(方便测试)
修改Culling Mask为Player

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

7.Layer用法:相机可见指定层
修改摄像机Culling Mask为Npc

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

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

本文详细介绍了Unity游戏开发中Layer的概念,如何添加、工作原理以及其在射线检测、灯光照亮、相机视图和碰撞检测中的应用。通过实例演示了如何通过代码设置和操作不同层级,提升场景管理效率。
详解&spm=1001.2101.3001.5002&articleId=136832997&d=1&t=3&u=4b2ca09b50bb440295256c9066d4935b)
2917

被折叠的 条评论
为什么被折叠?



