【Unity】2DSpriteとUIの違い
作業が忙しくなって日が開いてしまいました!(言い訳)
今回はUnityのSprite(2Dオブジェクト)とUIの違いについて学んだことをざっくり書き残していきます。
※厳密にはSprite RendererとuGUIの違い
まず使用頻度の高いUI
・CanvasRenderer ImageやTextなど作成すると自動的についてるやつ
・Canvas UIオブジェクト作成時、一番上の階層に他のCanvasがなければ自動的に作られるやつ
この2つを組み合わせて描画しているようです。
描画の順番はHierarchyの上から下にかけて新しくなります。
またCanvasに設定したSorting LayerとOrder in Layerによる描画順制御も行えます。
どちらも値が大きくなるほど新しく描画されるのですが、
・Sorting Layer ― 他の描画オブジェクト(2DSprite)との描画順制御
・Order in LayerはCanvas ー 同士の描画順制御
で使っているイメージです。
Image、RawImageの違い
どちらもRectTransformというコンポーネントを所持しており、
画面サイズ毎にUIの配置があまり変わらないよう、Anchorなどで自動的に置換してくれています。
初心者の私が気にする違いは、扱う画像の種類
・Image ― Sprite
パッキングやタイリング可能
・RawImage ― Texture
Web上の画像を表示可能
基本的にはImageでよさそうです。
次にSprite(2Dオブジェクト)
UIと異なり、RectTransformでなく普通のTransformがついてます。
また、SpriteRendererという、単体で描画する機能を持ったレンダラーがついてます。
Canvas同じく、その中にSorting LayerとOrder in Layerがあるので、
UIより先に描画したい場合はSorting LayerでUI、SpriteなどのLayer名を設定し、
Edit > Project Settings > Tags and Layers で順番を変えることで共存可能です。
つまり・・・
2DSpriteはCanvas階層内に含めなくても描画できるが、
UIのように画面サイズ変更対応に強くありません。
全部UIでいいのでは?
2Dゲームでなければそれで対応できるのかもしれません。
しかし、Sprite(2Dオブジェクト)にはLightを当てることが出来ます。
これはUIでは出来ないことなので2Dゲームの種類によっては必要になると思います。
(アセットを使えば解決ですが)
2Dゲームでも逆にライトを画像に当てない場合はUIだけでいいのかもしれません。
処理速度や効率を考えるようになると話は変わるのでしょうが
今はとりあえず....。