【Unity】描画順に迷わないためのTips(UI編)
UIの描画準の制御方法はいくつかありますが、描画対象が同一カメラの場合は階層順にしておけば迷うことは無いと考えています。例えば、スマートフォンでノベルゲームを作る場合、シーンには以下の様に空のGameObject で大きくグループ分けしておきます。
UIDisplay(Canvas)
|__BackGround (RectTransform オンリー)
|__Character (RectTransform オンリー)
|__UI (RectTransform オンリー)
|__Effect (RectTransform オンリー)
|__System (RectTransform オンリー)
それぞれのグループ分けの詳細はご覧の通りです。
BackGround | 背景 |
Character | キャラクター |
Effect | キャラにかぶせるエフェクトなど |
UI | メインとなるUI |
System | タップエフェクトや、画面全体を覆うフェードなど |
それぞれ種類ごとに View となる UI の GameObject を読み込みインスタンスを生成し、ぶら下げる形にする。Sorting Layer や Sorting Order は一律固定にしておく。初期値は0。また、Transform.position のZ値も0で埋めておく。新たに生成した UI は、必ず transform.SetAsLastSibling() を呼び出しグループの一番下に、つまり一番手前に表示される様にする。それと同時に直前まで一番手前に表示されていた UI の Canvas Group の Interactable を無効化し、判定を無効化する。これで誤動作が防げる。
また、UIが退場(削除)される際には逆のことをする。一番手前のUIが削除されれば、次に一番手前となるUIの Interactable を有効化する。
描画負荷軽減のための3階層目までしか描画しないなど工夫するのもアリ。
まとめ
これは一つの方法論に過ぎないので、当然ではありますが手法は多々あります。個人的にこの辺りに落ち着いたので共有したいなと思いました。