반응형
유니티의 UI 시스템인 Canvas 컴포넌트에는 다양한 Render Mode가 있습니다. 각 모드는 UI가 화면에 렌더링되는 방식에 영향을 줍니다. 자세히 살펴보겠습니다.

1. Screen Space - Overlay
이 모드는 UI가 항상 화면 최상단에 표시되며 게임 세계와 별개로 동작합니다.
특징:
- UI가 화면 해상도에 따라 자동 조정됩니다
- 카메라 설정과 무관하게 항상 보입니다
- 게임 화면 위에 직접 렌더링됩니다
예시: 체력바, 점수 표시, 메뉴 버튼과 같이 항상 플레이어에게 보여야 하는 요소에 적합합니다.
Canvas myCanvas = GetComponent<Canvas>();
myCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
2. Screen Space - Camera
이 모드는 특정 카메라 앞에 UI를 배치합니다. UI는 카메라와의 거리에 따라 크기가 변경될 수 있습니다.
특징:
- 지정된 카메라의 시야에 따라 렌더링됩니다
- 카메라와의 거리를 조절할 수 있습니다
- 게임 세계와 약간의 상호작용이 가능합니다
예시: 3D 게임에서 플레이어 주변에 떠다니는 상태 표시 UI나, 카메라 움직임에 따라 약간의 반응을 보여야 하는 요소에 적합합니다.
Canvas myCanvas = GetComponent<Canvas>();
myCanvas.renderMode = RenderMode.ScreenSpaceCamera;
myCanvas.worldCamera = Camera.main; // 메인 카메라 지정
myCanvas.planeDistance = 10f; // 카메라로부터의 거리
3. World Space
UI 요소가 완전히 게임 세계의 3D 공간 내에 존재하며 게임 오브젝트처럼 동작합니다.
특징:
- 3D 공간에서 실제 오브젝트처럼 배치됩니다
- 일반 3D 오브젝트와 상호작용할 수 있습니다
- 다양한 카메라 각도에서 볼 수 있으며, 다른 오브젝트에 가려질 수 있습니다
예시:
- NPC 머리 위의 이름표나 대화창
- 게임 내 가상 모니터나 터치스크린
- VR/AR 게임의 상호작용 요소
Canvas myCanvas = GetComponent<Canvas>();
myCanvas.renderMode = RenderMode.WorldSpace;
// 이제 Transform을 통해 3D 공간에서 위치, 회전, 크기 조절 가능
myCanvas.transform.position = new Vector3(0, 2, 0);
myCanvas.transform.rotation = Quaternion.Euler(0, 30, 0);
myCanvas.transform.localScale = new Vector3(0.01f, 0.01f, 0.01f);
실제 사용 예시
Screen Space - Overlay 예시
// 게임의 메인 UI 설정
public class MainUISetup : MonoBehaviour
{
void Start()
{
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
// 해상도 조정을 위한 설정
CanvasScaler scaler = GetComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920, 1080);
}
}
Screen Space - Camera 예시
// 메인 카메라에 연결된 UI 설정
public class CameraUISetup : MonoBehaviour
{
public Camera mainCamera;
void Start()
{
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceCamera;
canvas.worldCamera = mainCamera;
canvas.planeDistance = 5f;
// 카메라가 줌인/줌아웃할 때도 UI가 적절하게 보이도록 설정
CanvasScaler scaler = GetComponent<CanvasScaler>();
scaler.dynamicPixelsPerUnit = 100f;
}
}
World Space 예시
// NPC 위에 표시되는 정보 UI
public class NPCInfoDisplay : MonoBehaviour
{
public Transform npcHead;
void Start()
{
Canvas canvas = GetComponent<Canvas>();
canvas.renderMode = RenderMode.WorldSpace;
// NPC 머리 위에 배치
RectTransform rectTransform = GetComponent<RectTransform>();
rectTransform.position = npcHead.position + new Vector3(0, 0.5f, 0);
// 항상 카메라를 향하도록 설정
rectTransform.localScale = new Vector3(0.005f, 0.005f, 0.005f);
}
void Update()
{
// 항상 플레이어를 바라보도록 회전
transform.LookAt(Camera.main.transform);
transform.rotation = Quaternion.Euler(0, transform.rotation.eulerAngles.y, 0);
}
}
각 Render Mode는 고유한 장단점이 있으므로, 제작하려는 게임 유형과 UI 요소의 목적에 따라 적절한 모드를 선택하는 것이 중요합니다.
반응형
'프로그래밍 월드 > 유니티(Unity)' 카테고리의 다른 글
[Unity] 유니티에서 업로드 키를 분실하거나 암호를 잊어버렸을때 대처방법을 소개합니다. (0) | 2025.03.04 |
---|---|
[Unity] 유니티에서 개발하여 구글 앱스토어 등록할때 발생하는 에러(이 버전은 Google Play 64비트 요구사항을 준수하지 않습니다.) 해결방법 (0) | 2025.02.04 |
[Unity] 유니티에서 화면 가로, 세로 화면을 지정하거나 고정시키기 (0) | 2025.02.04 |
(Unity)유니티의 PlayerPrefs 사용법 및 장점/단점 정리해 봅시다. (0) | 2025.01.29 |
(Unity) 유니티 및 기타 코딩의 부동 소수점 비교에 대하여 1.0f != 1.0f ?? 이게 무슨 일일까 (0) | 2025.01.28 |