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中设置可碰撞层
打 √ 代表两个层之间是可以发生碰撞检测的