SpriteRendererとRendererの描画順がどういうルールになっているのかを調べました。
本題に入る前にSpriteRenderer同士の描画順についてまとめます。
◆ケース1
- Sorting Layerが異なる
=>下の方にあるSorting Layerほど手前に表示される
◆ケース2
- Sorting Layerが同じ
- Order in Layerが異なる
=>Order in Layerの値が大きいものほど手前に描画される
◆ケース3
- Sorting Layerが同じ
- Order in Layerが同じ
=>カメラから近いオブジェクトほどが手前に描画される
SpriteRendererとRenderer同士の描画順
では本題に入ります。
◆ケース1
SpriteRendererの設定
- Sorting Layer : Default
- Order in Layer : 0
Rendererの設定
- RenderQueue : 3000
- ZWrite Off
=>カメラに近かった方が手前に描画される
◆ケース2
SpriteRendererの設定
- Sorting Layer : Default
- Order in Layer : 1以上
Rendererの設定
- RenderQueue : 3000以上
- ZWrite Off
=>SpriteRendererが手前に描画される
◆ケース3
SpriteRendererの設定
- Sorting Layer : Default以外
- Order in Layer : いくつでも
Rendererの設定
- RenderQueue : 3000以上
- ZWrite Off
=>SpriteRendererが後から描画される
◆ケース4
SpriteRendererの設定
- Sorting Layer : どれでも
- Order in Layer : いくつでも
Rendererの設定
- RenderQueue : いくつでも
- ZWrite On
=>カメラから近いオブジェクトほどが手前に描画される
まとめ
Sprite Layer : Default
, Order in Layer : 0
のとき、もしくはRendererのShaderのZWriteがOnのとき、Rendererとの描画順はカメラからの距離で変更可能だということがわかりました。その他の設定になってしまうとSpriteRendererの方が手前に描画されるようです。
環境
- Unity5.6.1p1
あわせてどうぞ