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