LayerとSortingLayerの役割は全く別物です。
ややこしいので備忘録としてメモ。
Layer
概要
- http://docs.unity3d.com/ja/current/Manual/Layers.html
- GameObjectのグルーピングの役割を持つ
- 特定のLayerに所属するGameObjectに対してカメラの描画の有無や衝突を行うか否かを設定することが可能
Layerの更新
- Layerの設定は以下の方法で開くことが出来ます
- 上部メニュー [Edit] => [ProjectSettings] => [Tags and Layers]
- UnityEditor右上 [Layers] => [Edit Layers...]
- Insperctor上部 [Layer] => [Add Layer ...]
- LayerのSettingより、任意の名称のLayerを更新/追加/削除することができる
LayerをGameObjectに対して設定する
- 任意のGameObjectを選択し、Inspector上部の Layer からLayerを割り当てることが可能
- Script上では以下のように変更する
this.gameObject.layer = LayerMask.NameToLayer("LayerName");
Layerで出来ること
Cameraにて特定のLayerのGameObjectを描画させない
- CameraコンポーネントがアタッチされているGameObjectを選択
- CameraコンポーネントでCullingMaskが有効なレイヤーのみ、そのCameraで描画される
- 描画させたくないLayerのチェックを外せばOK
特定のLayerに所属するGameObjectのみライトを当てたい
- 任意のLightを追加する (e.g: DirectionalLight)
- LightコンポーネントでCullingMaskが有効なレイヤーのみ、そのライトが有効となる
- ライトを当てたいLayerのみチェックを残せばOK
特定のLayerに所属するGameObjectを衝突させない
- [Edit]=>[Project Settings]=>[Physics] にてPhysicsManagerを開く
- PhysicsManagerでは物理判定の設定を変更できる
- 衝突マトリクスにてLayer同士の衝突の有無を設定できる
SortingLayer
概要
- http://docs.unity3d.com/ja/current/ScriptReference/SortingLayer.html
- 特定のCameraにおける複数のRendererのレンダリングの順序を設定できる
SortingLayerの更新
- Layerの設定と同じ方法で Tags & Layers を開く
- [+] を押して新規のレイヤーを追加する
- レイヤーをドラッグして並び順を変更することで描画順序を変更することが出来る
- 下にある要素ほど前面に表示される
SortingLayerをGameObjectに設定する
Sprite
- SpriteRendererコンポーネント上のSortingLayerの項目より設定する
- Script上からは以下のように変更する
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sortingLayerName = "Sprite";
Canvas(UI)
- Canvasコンポーネント上のSortingLayerの項目より設定する
- ただしRenderModeが ScreenSpace - Overlay の場合は設定できない
- 強制的に前面に描画される扱いなため
- OverlayなCanvas同士の順序比較はSortOrderを利用する
- Script上からは以下のように変更する
Canvas canvas = GetComponent<Canvas>();
canvas.sortingLayerName = "UI";
Particle
- ParticleSystem上のRenderのSortingLayerの項目より設定する
- Script上からは以下のように変更する
ParticleSystem particleSystem = GetComponent<ParticleSystem>();
particleSystem.renderer.sortingLayerName = "Particle";
備考
- 同一のSortingLayerにおける描画順序はOrder In Layer > Z値の順で判定が掛かる