サイレンスブログ

Unity初心者の備忘録をかねた自分のやってきたもの

【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だけでいいのかもしれません。

処理速度や効率を考えるようになると話は変わるのでしょうが

今はとりあえず....。