Unity中的layer和tag
layer和tag均用于标识不同类别的gameobject,侧重点不同
Layer
- Unity中默认已经有8种layer,但可以自行设置layer,上限32种,对应于一个int值的32位
- 对于场景中的gameobject,均可以设置其layer。
用于camera
- layer和camera配合起来,可以达到尽在camera上渲染特定层gameobject的效果
- 相机有culling mask属性,也是对应于一个32位int值,如果对应layer的bit为1,则渲染此layer到此摄像机,在inspector界面可以选择多个layer,也可以在代码中设置多个layer的mask,比如
camera.cullingMask
= 1<<10 + 1<< 5 - camera的clipping planes属性有类似的作用,可限制绘制的物体距离范围,仅在范围内的将会被绘制。比如在房间中,紧贴camera的墙可以隐藏掉
用于raycast
- raycast可检测一条射线与gameobject的碰撞,检测时可以定义layermask参数,从而只和这些layer的物体发生碰撞
- 做raycast之前,通常要生成一条射线,相应的api为
-
ScreenPointToRay
从摄像机到屏幕坐标的射线 -
ViewportPointToRay
从摄像机到视口坐标的射线。视口坐标是相对于相机标准化的坐标,左下角为(0,0),右上角(1,1)。视口坐标可以和世界坐标、屏幕坐标相互转换
-
- 做raycast时,定义相关layermusk
Physics.Raycast(ray,
disance, layermask)- 如果没有定义layermask,则仅忽略IgnoreRaycast layer的物体
用于灯光
- 通过设置仅照亮特定layer
Tag
- 可以通过
GameObject.FindWithTay()
快速搜索到相关物体