UnityでCanvasの前後関係を制御する方法
Unityで複数のCanvasを使用する際、適切な前後関係を設定することが重要です。本資料では、Screen Space - CameraモードにおけるCanvasの前後関係を制御する方法を詳しく説明します。
ゲームビューでの実行結果

このスクリーンショットには、異なるCanvasに配置されたUI要素の描画順序に関連する情報が示されています。それぞれの要素がどのように描画されているかを解説します。
画像の構造
- Image(白い背景)
- 背景として使用されている矩形(Imageコンポーネント)。
- Text (Sample, New Text)
Imageの上に配置されたテキスト。- 「Imageと同じCanvas」と記載がある部分は、このテキストが
Imageと同じCanvas内で管理されていることを意味します。
- Text (別のCanvasに属する)
- 「Imageと違うCanvas」に属するテキスト。異なるCanvasに配置されており、
Imageと別の描画順序が設定されています。
- 「Imageと違うCanvas」に属するテキスト。異なるCanvasに配置されており、
- Cube
- シーン内にある3Dオブジェクト。これはCanvasではなく、一般的な3Dオブジェクトとして配置されています。
描画順序に関する解説
1. 同じCanvas内での描画順序
Imageと「Sample / New Text」が同じCanvasに属しているため、Hierarchy内での順序が描画順序に影響します。- Hierarchyで下に配置されたオブジェクトほど手前に描画されるため、
Imageの上にテキストが描画されています。
2. 異なるCanvas間での描画順序
- 「Imageと違うCanvas」に属するテキストは、別のCanvasに配置されています。この場合、描画順序は以下のプロパティによって制御されます:
Order in Layer: 同じSorting Layer内での描画順序を指定。Sorting Layer: Canvasごとの描画優先順位を制御。- このテキストが、
Imageを含むCanvasの描画順序よりも前に設定されているため、手前に表示されています。
3. 3DオブジェクトとUIの描画順序
Cubeは3DオブジェクトとしてCanvas外に配置されています。Screen Space - Cameraモードでは、Canvas内のUIは通常の3Dオブジェクトよりも手前に描画されることが一般的です。ただし、以下の要素が影響する場合があります:- カメラのクリッピング設定(
Near/Far Plane)。 - Canvasの
Plane Distance。
トラブルシューティングと設定の確認ポイント
- 同じCanvas内での順序調整
- Hierarchyの順序を調整することで、
Imageとテキストの表示順を変更できます。
- Hierarchyの順序を調整することで、
- 異なるCanvas間での描画調整
Sorting LayerとOrder in Layerを確認し、適切に値を設定してください。Imageと違うCanvasのOrder in Layerが、背景Canvasの値より大きく設定されている場合、手前に描画されます。
- 3DオブジェクトとUIの関係
- 3DオブジェクトがUIに隠れる場合、Canvasの
Plane Distanceを変更することで、UI全体をカメラに近づけたり遠ざけたりできます。
- 3DオブジェクトがUIに隠れる場合、Canvasの
サンプル設定例
Canvas 1(背景Canvas)
- Sorting Layer: Default
- Order in Layer: 0
- Plane Distance: 100
Canvas 2(手前のCanvas)
- Sorting Layer: Default
- Order in Layer: 1
- Plane Distance: 90
カメラ
- Render Mode: Screen Space – Camera
- Culling Mask: UIが含まれるレイヤーを設定。
1. 前提知識
CanvasのRender Mode
Canvasには以下の3つのRender Modeがありますが、本資料ではScreen Space - Cameraに焦点を当てます。
- Screen Space – Overlay
- UIがスクリーン全体に描画されます。
- 描画順序は
Sorting Orderで制御されます。
- Screen Space – Camera(本資料の対象)
- UIが特定のカメラに関連付けられて描画されます。
- 描画順序は
Order in LayerとSorting Layerで制御されます。
- World Space
- UIが3Dオブジェクトとしてシーン内に配置されます。
2. 前後関係を制御するプロパティ
2.1 Order in Layer
Order in Layerは、同じSorting Layerに属するCanvas間の前後関係を制御します。
- 値が大きいほど手前に描画されます。
- 値が同じ場合、描画順序は保証されません。
設定手順
- 各Canvasを選択します。
- InspectorのCanvasコンポーネントで
Order in Layerを確認。 - 必要に応じて値を調整します。
例
- 背景Canvas:
Order in Layer = 0 - 前景Canvas:
Order in Layer = 1
2.2 Sorting Layer
Sorting Layerは、Canvasをグループ化して描画順序を整理するプロパティです。
- 異なる
Sorting Layerに属するCanvas間では、Sorting Layerの優先順位が適用されます。 Sorting Layerを設定することで、複数のUIグループを管理しやすくなります。
設定手順
- Unityメニューで「
Edit > Project Settings > Tags and Layers」を開きます。 - 必要な
Sorting Layerを作成(例:Background,Foreground)。 - 各CanvasのInspectorで
Sorting Layerを設定します。
例
- 背景Canvas:
Sorting Layer = Background - 前景Canvas:
Sorting Layer = Foreground
2.3 Plane Distance
Plane Distanceは、Canvasが関連付けられたカメラからどれだけ離れて描画されるかを指定します。
- 通常は
Order in Layerが優先されますが、Plane Distanceを大幅に変更すると描画順序に影響することがあります。
設定手順
- CanvasのInspectorで
Plane Distanceを確認。 - 必要に応じて値を調整します。
- 手前のCanvas: 小さい値(例:
50)。 - 背景のCanvas: 大きい値(例:
100)。
3. カメラ設定の影響
3.1 Culling Mask
カメラが描画するオブジェクトを制御するプロパティです。
Sorting Layerや特定のオブジェクトをカメラで制御したい場合に使用します。
設定手順
- 各カメラのInspectorで
Culling Maskを確認。 - 対象のCanvasが含まれるレイヤーを有効化します。
4. 設定例
以下は、背景Canvasと前景Canvasを分けて設定する例です。
Canvasの設定
| 項目 | 背景Canvas | 前景Canvas |
|---|---|---|
| Sorting Layer | Background | Foreground |
| Order in Layer | 0 | 1 |
| Plane Distance | 100 | 50 |
カメラの設定
| 項目 | 背景用カメラ | 前景用カメラ |
|---|---|---|
| Culling Mask | Background | Foreground |
5. チェックリスト
- Canvasの
Order in Layerが正しいか?- 前後の描画順序を制御する主要なプロパティです。
Sorting Layerを適切に活用しているか?- 複数のUIグループが存在する場合は、
Sorting Layerを整理して管理します。
- 複数のUIグループが存在する場合は、
- カメラの
Culling Maskが正しく設定されているか?- 不要なCanvasが描画されないようにします。
Plane Distanceが意図通りか?- 必要に応じてCanvasの距離を調整します。
- Game Viewで結果を確認する
- すべての設定が正しく反映されているか確認します。
6. 注意点
- Canvasの分割は最小限に
- Canvasを増やすとパフォーマンスに影響する可能性があります。可能な限り1つのCanvasにまとめて管理しましょう。
Order in Layerの重複に注意- 複数のCanvasで同じ
Order in Layerを設定すると、描画順序が不定になる可能性があります。
- 複数のCanvasで同じ
- カメラの
Render Modeを統一Screen Space - Cameraと他のRender Modeが混在している場合、意図しない結果になることがあります。
Emission、Bloomに関係する設定、登録
添付のキャプチャーから合わせてみましょう







using UnityEngine;
using UnityEngine.UI;
public class EmissionExample : MonoBehaviour
{
public Color glowColor = new Color(1.0f, 1.0f, 0.5f); // 発光色
public float glowIntensity = 2.0f; // 発光の強度
void Start()
{
// マテリアルの発光色を設定
GetComponent<Image>().material.SetColor("_EmissionColor", glowColor * glowIntensity);
}
}
using UnityEngine;
public class EmissionExample3DObject : MonoBehaviour
{
public Color emissionColor = Color.blue; // 発光する色
public float emissionIntensity = 2.0f; // 発光の強度
void Start()
{
Renderer renderer = GetComponent<Renderer>();
if (renderer != null)
{
Material material = renderer.material;
// エミッションを有効化
material.EnableKeyword("_EMISSION");
// エミッションカラーを設定
material.SetColor("_EmissionColor", emissionColor * emissionIntensity);
}
}
}


ディスカッション
コメント一覧
まだ、コメントがありません