【Unity】【uGUI】CanvasのRender Modeをちゃんと理解する

なんとなく雰囲気で設定されがち(?)なCanvasのRender Modeについてわかりやすくまとめてみました。

Unity2018.3.1

基本的な考え方

平面上に表示されるGUIも結局は3D空間上に置かれたGameObjectなので、Cameraに映すことで描画されます。

f:id:halya_11:20190206223014p:plain

CanvasのRender Modeとは「GUIをカメラにどのように映すか」を設定する項目です。
Render Modeには下記の三つが存在します。

  • Screen-Space Overlay
  • Screen-Space Camera
  • World Space

f:id:halya_11:20190206223608p:plain

以下、この三つについて説明していきます。

World Space

まずRender ModeをWorld Spaceにします。
この設定は一番使う機会が少ないと思いますが、便宜上最初に説明します。

f:id:halya_11:20190206223947p:plain

World SpaceとはCanvasをワールド空間上の決まった位置に配置する設定です。
Canvasは単純にワールド空間に置かれているだけなので、カメラが移動すれば映らなくなります。

f:id:halya_11:20190206223846g:plain

単純にワールド空間に置かれているだけなので、Perspectiveなカメラで斜めから移せば斜めに映ります。

f:id:halya_11:20190206224142p:plain

単純にワールド空間に置かれているだけなので、他のオブジェクトがカメラの範囲内にあれば映ります。

f:id:halya_11:20190206224442p:plain

またこの設定の場合のみ、Canvasの位置を自由に変更できます。

f:id:halya_11:20190206225058p:plain

Screen-Space Camera

World Spaceのカメラは自由度が高いですが、Canvasを自由な位置に配置したいケースは実は多くありません。
大体はカメラの描画範囲いっぱいに一個のCanvasが映っていれば十分です。

f:id:halya_11:20190206225335p:plain

そんなときにはRender ModeをScreen-Space Cameraに設定します。

f:id:halya_11:20190206225616p:plain

すると、Canvasが常にCameraにくっついてくるようになります。

f:id:halya_11:20190206225454g:plain

カメラの範囲内に他のオブジェクトがあれば移りますが、
前節のWorld Spaceと異なりCameraにはGUIが追従してきます。

f:id:halya_11:20190206225835g:plain

カメラとの距離はCanvasのPlane Distanceで設定します。

f:id:halya_11:20190206230131p:plain

Perspectiveなカメラに映すこともできます。

f:id:halya_11:20190206225913p:plain

Screen-Space Overlay

最後にScreen-Space Overlayに設定してみます。

f:id:halya_11:20190206230351p:plain

この設定では、Canvasは常に最前面に描画され、スクリーン全面に配置されます。
Cameraに映してるわけではないので、GUI用のCameraは必要ありません。

f:id:halya_11:20190206230639p:plain

常に最前面に描画されるので、前節のように前後に他のオブジェクトを映すことができません。
正確には他のカメラで映せば後ろに映すことはできますが、手前には映せません。

f:id:halya_11:20190206231006p:plain

一番お手軽に使えるけど制限はそれなり多い設定です。

以上、三つのRender Modeについて説明しました。