【Unity】描画順に迷わないためのTips(3D編)

2019/12/06DEVELOP, Unity

Unity の描画順は期間が空くと忘れてしまうのでメモしておこうと思います。

確認バージョン

Unity 2019.1.9f1

大まかな順番

大小・強弱で表すとCameraの Depth 値 > Sorting Layer > Sorting Order の順。昇順に描画される。

複数カメラが存在していれば Camera コンポーネントの Depth 値を見る

一番大きな括り。カメラが複数配置されている場合はDepth 値を見て、次に描画対象となっている GameObject 達を確認します。

同一カメラ内では Sorting Layer 値を見る

画像はSprite Renderer の例

同一 Sorting Layer 間のオブジェクトであれば sortingOrder 値を見る

Inspecter の表記では Order in Layer と表記されていたりします。

public class Renderer : Component
{
    public Renderer();
    //
    // 概要:
    //     Renderer's order within a sorting layer.
    public int sortingOrder { get; set; }
}

ソースコードを読むとアクセスするべきプロパティは sortingOrder だと分かる。

いずれでも無ければ transform.position の Z値 順

純粋に前後順

Z値も同じであれば、Inspecterの階層順

Sprite Renderer でスプライトを描画してした例

Sorting Group を使ってまとめて描画準を設定する

親子になっている GameObject に対して、全て Sorting Layer や Sorting Order を設定するのは設定漏れだったりミスをしてしまう可能性があります。そこで登場するのが Sorting Group です。 Sorting Group を親の GameObject に設定すると個々に設定されている値を無視しまとめて Sprting Layer と Sprting Order を設定することが出来ます。

例えば、親となっている 0と2のGameObjectにSorting Group を割り当て、0のOrder In Layer値を0、2の方の Order In Layer値を1とします。

こうすることで、親子まとめてSorting Group に設定した順に描画される様になります。これは大変便利なので覚えておくとよいです。

2,3がまとめて手前に描画される様になりました。

まとめ

Material のレンダーキューとかの話もありますが、この辺りを網羅しておけば基本的な所は大丈夫でしょう。複雑な所を確認するよりは、まずは分かりやすいところから見ていくことが基本ですね。

Posted by kazupon