핵심 정리
| 항목 | 내용 |
|---|---|
| 역할 | uGUI 요소를 어떤 방식으로, 어떤 카메라와 어떤 정렬 순서로 렌더링할지 결정 |
| 언제 쓰는가 | HUD, 메뉴, 팝업, 월드 공간 UI, 화면 전환 오버레이를 만들 때 |
| 기준 버전 | Unity 6.5 (6000.5) |
| 핵심 Inspector | Render Mode, Render Camera, Plane Distance, Pixel Perfect, Sorting Layer, Order in Layer, Target Display |
| 자주 연결되는 API | renderMode, worldCamera, sortingLayerID, sortingOrder, enabled, ForceUpdateCanvases |
Inspector 설정
| 설정값 | 언제 바꾸는가 | 잘못 맞추면 생기는 문제 |
|---|---|---|
| Render Mode | HUD, 카메라 기반 UI, 월드 UI 중 무엇인지 정할 때 | 깊이 관계와 클릭 체감이 전혀 달라짐 |
| Render Camera | Camera/World Space Canvas의 기준 카메라를 줄 때 | UI는 보이는데 정렬·포스트 프로세싱이 어색함 |
| Plane Distance | Camera Space UI 깊이를 조정할 때 | 너무 가깝거나 멀어 잘리거나 겹침 |
| Sorting Layer / Order in Layer | 여러 Canvas의 앞뒤 순서를 정할 때 | 팝업이 HUD 뒤에 숨거나 순서가 뒤섞임 |
| Pixel Perfect | 픽셀 선명도를 우선할 때 | 모든 해상도에서 무조건 좋아지는 옵션은 아님 |
| Additional Shader Channels | 커스텀 UI 셰이더에 추가 정점 정보가 필요할 때 | 이유 없이 켜면 데이터 비용만 늘어남 |
Render Mode
Screen Space - Overlay는 가장 단순하고 빠른 HUD에 적합합니다. Screen Space - Camera는 특정 카메라와 깊이 관계를 맞춰야 하는 UI, 포스트 프로세싱과 같이 보이는 UI에 자주 씁니다. World Space는 3D 오브젝트처럼 씬 안에 떠 있는 체력바, 상호작용 패널에 적합합니다.
Render Mode를 잘못 고르면 UI는 보이는데 클릭이 안 되거나, 카메라 연출과 깊이 관계가 어색해질 수 있습니다.
| 값 | 언제 고르는가 | 주의할 점 |
|---|---|---|
Screen Space - Overlay | 일반 HUD, 메뉴, 팝업처럼 화면 최상단 UI | 카메라 후처리나 깊이 연출과 직접 섞기 어렵다 |
Screen Space - Camera | 카메라 기반 연출, 후처리와 함께 보이는 UI | Render Camera와 Plane Distance가 빠지면 정렬이 어색해질 수 있음 |
World Space | NPC 머리 위 이름표, 3D 패널, 월드 상호작용 UI | 스케일과 픽셀 밀도를 잘못 잡으면 너무 크거나 흐려 보임 |
Render Camera, Plane Distance, Sorting
Screen Space - Camera와 World Space에서는 어떤 카메라를 기준으로 그릴지 명확해야 합니다. Plane Distance는 카메라 앞 어느 깊이에 둘지를 정합니다. Sorting Layer와 Order in Layer는 여러 Canvas 사이의 앞뒤 순서를 결정합니다.
팝업, 토스트, 전투 HUD를 한 Canvas에 다 몰아넣으면 정렬만이 아니라 rebuild 비용까지 함께 커집니다. 앞뒤 순서가 자주 바뀌는 UI는 별도 Canvas로 쪼개는 편이 관리가 쉽습니다.
Pixel Perfect, Target Display, Additional Shader Channels
Pixel Perfect는 픽셀 기반 UI에서 흐림을 줄이는 데 도움 되지만, 모든 프로젝트에 무조건 필요한 값은 아닙니다. Target Display는 멀티 디스플레이 프로젝트에서만 의미가 큽니다.
Additional Shader Channels는 커스텀 UI 셰이더나 특수 정점 정보가 필요할 때만 건드립니다. 이유 없이 올리면 데이터를 더 많이 밀어 성능에 불리할 수 있습니다.
스크립트 연결
| 필드/프로퍼티 | 언제 읽거나 쓰는가 | 주의할 점 |
|---|---|---|
renderMode | HUD/월드 UI 모드를 전환할 때 | 하위 좌표계와 카메라 요구 사항이 함께 바뀜 |
worldCamera | Camera/World Space 기준 카메라 연결 | 빠지면 클릭과 정렬이 틀어질 수 있음 |
sortingLayerID / sortingOrder | 팝업 우선순위를 올릴 때 | 여러 Canvas가 얽히면 전역 정렬 규칙을 같이 봐야 함 |
enabled | Canvas 전체 렌더만 끄고 싶을 때 | 하위 상태는 남아 있어 입력 흐름과 분리될 수 있음 |
| 메서드 | 언제 쓰는가 | 연결 지점 |
|---|---|---|
ForceUpdateCanvases() | 레이아웃 계산을 즉시 반영해야 할 때 | 동적 목록 갱신 직후 |
GetDefaultCanvasMaterial() | 기본 재질이 필요할 때 | 커스텀 UI 그래픽 구현 |
상위 GameObject SetActive() | UI 묶음을 통째로 켜고 끌 때 | 팝업 열기/닫기 |
Canvas는 자주 켜고 끄는 대상이라기보다, 모드와 카메라를 한 번 정하고 하위 그래픽만 바꾸는 경우가 많습니다.
using UnityEngine;
public class WorldUiCanvasBinder : MonoBehaviour
{
[SerializeField] private Canvas canvas;
[SerializeField] private Camera targetCamera;
private void Awake()
{
canvas.renderMode = RenderMode.WorldSpace;
canvas.worldCamera = targetCamera;
}
}레이아웃 강제 갱신은 ForceUpdateCanvases, 표시 전환은 enabled나 상위 GameObject 활성화가 흔한 연결 지점입니다.
자주 틀리는 부분
- Overlay와 Camera 모드를 혼동해 카메라 기반 UI가 깊이와 후처리에서 어색해질 수 있습니다.
- 정렬이 자주 바뀌는 UI를 한 Canvas에 몰아넣으면 rebuild 비용과 디버깅 난이도가 같이 올라갑니다.
- World Space Canvas인데
worldCamera와 스케일 기준을 안 맞추면 화면에서 너무 크거나 작게 보입니다. - 클릭 문제가 생기면 Canvas보다
GraphicRaycaster,Raycast Target, EventSystem까지 같이 봐야 합니다.
관련 컴포넌트
Button, Image, TextMeshPro, RectTransform, anchor, pivot, Canvas Scaler, Graphic Raycaster와 Raycast Target
참고 링크
2 sources