Unity中的layer和tag

时间:2021-01-20 04:08:44

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()快速搜索到相关物体

作者Focustc,来自于 CSDN