Unity

[Unity] LayerとSortingLayerの違い

More than 1 year has passed since last update.

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値の順で判定が掛かる


参考