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中设置可碰撞层
打 √ 代表两个层之间是可以发生碰撞检测的
热门推荐
忒伊亚:月球之母与地球板块运动的奥秘
成长的励志名言(精选80句)
手机摄像头外面的玻璃碎了有影响吗?如何处理?
日产蓝鸟轮胎的型号规格是什么?
消防的基本知识
「天一生水 地六成之」是什么意思,当作何理解?
张本智和遭遇家庭“内战”?父亲竟更看好妹妹夺冠!
电复律与电除颤的区别
Excel写日记固定格式的技巧
怀牛膝的功效与作用、禁忌和食用方法
怀牛膝:四大怀药之一的活血化瘀良药
纳豆激酶的功效与作用
中国安徽天然奇观,飘渺虚幻云雾世界,黄山云海蕴藏的自然法则?
鼻中隔偏曲详解:定义、症状与治疗方案
唐代文学概述
老年多病共存患者护理难题如何破?松山多学科护理 MDT 协同作战解难题
五金仓库如何优化管理工作
锦纶6面料如何提高摩擦色牢度?
正确操作和维护隔膜泵
Excel数据粘贴到微信的12种实用方法
汤姆·汉克斯:《阿甘正传》中的完美演绎
游泳馆水质监测系统设计解决方案
哪些情况适用劳动人事争议仲裁组织规则
长江三峡及周边地区早期人类的生存环境与生存行为
当前市净率对投资决策的重要性解析
芝麻粕利用的研究现状:可部分代替豆粕用于饲料加工
直流无刷散热风扇的知识原理与内部构成
3D模型文件格式有哪些?它们之间有什么区别?
仓储管理系统:WMS与WCS的精准对接之道
前瞻性研究和回顾性研究的区别