Canvasは、ボタンや文字、画像などのUIを表示するための土台です。画面に重ねるメニューならScreen Space – Overlay、ゲーム空間に置くUIならWorld Spaceを選びます。この記事では描画モード、画面サイズへの対応、クリック判定、表示の切り替えを順に確認します。

  • Canvasの基本とレンダリングモードの違い
  • 画面サイズに応じたレスポンシブUIの作り方(CanvasScalerの設定)
  • スクリプトでCanvasを操作する方法
  • パフォーマンス最適化(バッチング・描画負荷の削減)

Canvasとは?

CanvasはUIを描画するための土台 です。
ボタン、テキスト、画像、スライダーなどのUIコンポーネントは必ずCanvasの子オブジェクトとして配置されます。

特徴

  1. UI専用の描画領域
    • UIの前後関係はRender Modeで変わります。Screen Space – Overlayはゲーム画面に重なりますが、Screen Space – CameraやWorld Spaceでは、UIより手前の3Dオブジェクトが前に表示されることがあります。
  2. スケーリング制御
    • 「Canvas Scaler」を使うことで、画面サイズに応じてUIを拡縮できます。例えばスマホやPCで同じUIを違和感なく表示可能。
  3. 複数Canvasで描画負荷を分割できる
    • UIが多い場合、Canvasを分けることで不要な再描画を減らせます。

Canvasの使い方

Canvasの追加方法と構成要素

① Hierarchyから追加

・ [Hierarchy] → [右クリック] → [UI] → [Canvas]を選択
・ Canvasオブジェクトがシーンに追加される

② Canvasの構成要素

Unity Canvasの導入の画像
コンポーネント名役割主な機能
CanvasUI の土台UI を描画するための基本コンポーネント
Canvas ScalerUI のスケール調整画面サイズに応じて UI の大きさを自動調整
Graphic RaycasterUI のクリック判定UI のタッチやクリックを検出し、他のオブジェクトと判定を調整

CanvasのRender Mode(描画モード)

Canvasには、3つのRender Mode(描画モード)があり、それぞれのUIの表示方法が異なります。

➡2DゲームやHUDなら「Screen Space – Overlay」がおすすめ
➡カメラに合わせて動かしたい場合は「Screen Space – Camera」
➡ワールド空間にUIを配置したい場合は「World Space」

Rendering Mode特徴用途
Screen Space – Overlay画面の一番上にUIを描画UI(メニュー、HUDなど)
Screen Space – Camera指定したカメラから一定距離にUIを配置シーン内の物体との前後関係を持たせたい場合
World SpaceUIを3Dオブジェクトとして配置3DのUI、VR/ARのUI

Render Mode(描画モード)の選択

Render Modeを変更することでレンダリングモードを選択できる。

Unity CanvasのRenderModeの画像

画面サイズに応じたUIの調整(Canvas Scaler)

Canvas Scalerで画面サイズに応じた拡縮を設定します。Scale With Screen Sizeを選び、Reference Resolutionを設計時の解像度に合わせましょう。縦横比が変わる場合はScreen Match Modeに加え、各UIのRect Transformのアンカーも調整します。Scalerだけで配置が自動的に整うわけではありません。

Unity CanvasのCanvas Scalerの画像
UI Scale Mode特徴おすすめの用途
Constant Pixel Size解像度に関係なく、UIのサイズを固定ピクセルで表示固定解像度のアプリ
Scale With Screen Size
(おすすめ)
画面サイズに合わせて UIを 拡大・縮小 するスマホ・タブレット向けのアプリ
Constant Physical SizeUIを 物理サイズ(cm, inch) で統一VRやARなど、デバイスごとに物理的なサイズを揃えたいとき

Raycast処理(Graphic Raycaster)

UIのクリック判定の設定をするコンポーネントです。

CanvasのGraphic Raycaster設定
設定名説明主な用途
Ignore Reversed Graphics裏向き(背面)の UI を無視 する画面に見えていない UI をクリック対象外にする
Blocking ObjectsUIへのレイキャストを遮るColliderの種類。Noneは遮断なし、Two Dは2D、Three Dは3D、Allは両方UIより手前にある物体の向こう側をクリックさせたくないとき
Blocking Maskレイキャストを遮るColliderのレイヤーを指定特定のレイヤーのオブジェクトだけ UI のクリックを無効化したいとき

Blocking Objectsは、手前のColliderでUIへの入力判定を遮る設定です。UIを押したときに背後のゲーム処理も動く問題は別で、ゲーム側の入力処理でUI上かどうかを判定します。

スクリプトでCanvasを操作する

Canvasの表示・非表示

➡ゲーム開始時にUIを表示/非表示することが可能です!

using UnityEngine;

public class CanvasManager : MonoBehaviour
{
    public Canvas gameCanvas;

    public void ShowCanvas()
    {
        gameCanvas.gameObject.SetActive(true);
    }

    public void HideCanvas()
    {
        gameCanvas.gameObject.SetActive(false);
    }
}

パフォーマンス最適化

頻繁に変わるUIと固定UIを別のCanvasに分けると、再構築の範囲を減らせる場合があります。ただしCanvasを増やすと描画処理が増えることもあるため、Profilerで変更前後を比較します。操作を受け付けないCanvasではGraphic Raycasterを外すことも検討できます。

まとめ

・CanvasはUnityのUIを描画する基盤となるコンポーネント
・レンダリングモードを正しく選択
・画面サイズへの対応はCanvas Scalerと各UIのアンカーを組み合わせる
・スクリプトでCanvasを制御可能
・Canvasの最適化を行い、パフォーマンスを維持!

UIを縦・横に自動整列したい場合は、Layout Groupの使い方も参考にしてください。

参考:Unity公式:Canvas、Unity公式:Graphic Raycaster