[Unity] LayerとSortingLayerの違い

  • 25
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

LayerとSortingLayerの役割は全く別物です。
ややこしいので備忘録としてメモ。

Layer

概要

Layerの更新

  • Layerの設定は以下の方法で開くことが出来ます
    • 上部メニュー [Edit] => [ProjectSettings] => [Tags and Layers]
    • UnityEditor右上 [Layers] => [Edit Layers...]
    • Insperctor上部 [Layer] => [Add Layer ...]
  • LayerのSettingより、任意の名称のLayerを更新/追加/削除することができる

layersetting.png

LayerをGameObjectに対して設定する

  • 任意のGameObjectを選択し、Inspector上部の Layer からLayerを割り当てることが可能

layer.png

  • Script上では以下のように変更する
this.gameObject.layer = LayerMask.NameToLayer("LayerName");

Layerで出来ること

Cameraにて特定のLayerのGameObjectを描画させない

  • CameraコンポーネントがアタッチされているGameObjectを選択
  • CameraコンポーネントでCullingMaskが有効なレイヤーのみ、そのCameraで描画される
  • 描画させたくないLayerのチェックを外せばOK

cullingmaskcamera.png

特定のLayerに所属するGameObjectのみライトを当てたい

  • 任意のLightを追加する (e.g: DirectionalLight)
  • LightコンポーネントでCullingMaskが有効なレイヤーのみ、そのライトが有効となる
  • ライトを当てたいLayerのみチェックを残せばOK

cullingmasklight.png

特定のLayerに所属するGameObjectを衝突させない

  • [Edit]=>[Project Settings]=>[Physics] にてPhysicsManagerを開く
  • PhysicsManagerでは物理判定の設定を変更できる
  • 衝突マトリクスにてLayer同士の衝突の有無を設定できる

physics.png

SortingLayer

概要

SortingLayerの更新

  • Layerの設定と同じ方法で Tags & Layers を開く
  • [+] を押して新規のレイヤーを追加する
  • レイヤーをドラッグして並び順を変更することで描画順序を変更することが出来る
    • 下にある要素ほど前面に表示される

sortinglayer.gif

SortingLayerをGameObjectに設定する

Sprite

  • SpriteRendererコンポーネント上のSortingLayerの項目より設定する

Sprite.png

  • Script上からは以下のように変更する
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sortingLayerName = "Sprite";

Canvas(UI)

  • Canvasコンポーネント上のSortingLayerの項目より設定する
  • ただしRenderModeが ScreenSpace - Overlay の場合は設定できない
    • 強制的に前面に描画される扱いなため
    • OverlayなCanvas同士の順序比較はSortOrderを利用する

canvas.png

  • Script上からは以下のように変更する
Canvas canvas = GetComponent<Canvas>();
canvas.sortingLayerName = "UI";

Particle

  • ParticleSystem上のRenderのSortingLayerの項目より設定する

particle.png

  • Script上からは以下のように変更する
ParticleSyatem particleSystem = GetComponent<ParticleSystem>();
particleSystem.renderer.sortingLayerName = "Particle";

備考

  • 同一のSortingLayerにおける描画順序はOrder In Layer > Z値の順で判定が掛かる

参考