【Unity】描画順に迷わないためのTips(3D編)
Unity の描画順は期間が空くと忘れてしまうのでメモしておこうと思います。
目次
確認バージョン
Unity 2019.1.9f1
大まかな順番
大小・強弱で表すとCameraの Depth 値 > Sorting Layer > Sorting Order の順。昇順に描画される。
複数カメラが存在していれば Camera コンポーネントの Depth 値を見る
一番大きな括り。カメラが複数配置されている場合はDepth 値を見て、次に描画対象となっている GameObject 達を確認します。
同一カメラ内では Sorting Layer 値を見る
同一 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の階層順
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 に設定した順に描画される様になります。これは大変便利なので覚えておくとよいです。
まとめ
Material のレンダーキューとかの話もありますが、この辺りを網羅しておけば基本的な所は大丈夫でしょう。複雑な所を確認するよりは、まずは分かりやすいところから見ていくことが基本ですね。