06 UI·UX - jes79/Unity-AI-Glossary-Playground GitHub Wiki
06 UI·UX
uGUI(Canvas)와 UI Toolkit 중 어느 쪽인지 요청 첫 줄에 적으세요. 이 프로젝트는 uGUI + TextMeshPro입니다.
씬 18개 · 폴더 Assets/00_Scenes/06_UI
| 번호 | 용어 | 쉽게 말하면 | 씬에서 보여 주는 것 | 구현 방식 |
|---|---|---|---|---|
| 0601 | Canvas / uGUI | 기본 UI 시스템 | 체력바·점수·일시정지 버튼 HUD, Render Mode Overlay↔Camera 비교 | 런타임 데모 |
| 0602 | Canvas Scaler | 해상도별 UI 크기 맞춤 | 1920x1080 기준 Scale With Screen Size, 기기 해상도 미리보기 | 런타임 데모 |
| 0603 | Anchor / Pivot | UI 고정 기준점 | 오른쪽 위 Anchor 고정 점수 vs 가운데 Anchor, Pivot 회전 중심 | 런타임 데모 |
| 0604 | TextMeshPro (TMP) | 선명한 글자 컴포넌트 | 한글 동적 폰트 아틀라스가 채워지는 모습, Font Asset Creator 단계 | 설명 + 대체 구현 |
| 0605 | Layout Group | 자동 정렬 (가로·세로·격자) | Grid Layout Group 4x5 인벤토리 자동 배치 | 런타임 데모 |
| 0606 | Scroll View | 스크롤 목록 | Scroll View에 상점 아이템 동적 생성·구매 | 런타임 데모 |
| 0607 | 월드 스페이스 UI | 캐릭터 머리 위에 떠 있는 UI | 적 머리 위 World Space 체력바, 빌보드 비교 | 런타임 데모 |
| 0608 | 체력바 (딜레이 감소) | 깎인 부분이 늦게 따라 줄어듦 | 체력바 즉시 감소 + 흰 바 0.5초 뒤 따라옴 | 런타임 데모 |
| 0609 | 쿨타임 UI (Radial Fill) | 원형으로 차오르는 쿨다운 | Image Fill Radial 360 스킬 쿨타임 UI | 런타임 데모 |
| 0610 | 대화 시스템 / 타자 효과 | 대사창, 한 글자씩 출력 | 한 글자씩 출력, 클릭하면 전부 표시 | 런타임 데모 |
| 0611 | 팝업 / 모달 | 확인·취소 창 | 재사용 확인/취소 팝업, 모달 차단막 | 런타임 데모 |
| 0612 | 일시정지 메뉴 | Time.timeScale 0 + 메뉴 | ESC 일시정지 메뉴(계속·설정·메인으로), timeScale 0 | 런타임 데모 |
| 0613 | 드래그 앤 드롭 | UI를 끌어다 놓기 | IDragHandler로 인벤토리 아이템 슬롯 교환 | 런타임 데모 |
| 0614 | 툴팁 (Tooltip) | 마우스 올리면 설명 | 마우스를 올리면 이름·설명 툴팁 | 런타임 데모 |
| 0615 | 미니맵 | 위에서 본 작은 지도 | 탑뷰 카메라 + Render Texture 미니맵, 아이콘·줌 | 런타임 데모 |
| 0616 | 로딩 화면 (비동기 로딩) | 진행률 표시하며 씬 로드 | LoadSceneAsync 진행률 바 로딩 화면 | 런타임 데모 |
| 0617 | 조이스틱 (모바일) | 화면 가상 조이스틱 | 모바일 가상 조이스틱 + 점프 버튼 | 런타임 데모 |
| 0618 | 세이프 에어리어 (Safe Area) | 노치 영역 피하기 | 노치 흉내 + Screen.safeArea 앵커 적용 | 런타임 데모 |
항목별 상세
0601
Canvas / uGUI — 기본 UI 시스템
요청 예문: "uGUI로 체력바, 점수, 일시정지 버튼이 있는 HUD를 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0601_CanvasUGUI.unity - 핵심 스크립트:
HudController - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0601_CanvasUGUI.cs - 구현 방식: 런타임 데모
- 개념: 모든 UI 요소가 올라가는 판이 Canvas, 그 위의 버튼·이미지·텍스트 묶음이 uGUI 다. Render Mode 가 Overlay 면 화면에 바로 덮이고, Screen Space Camera 면 카메라를 거쳐 후처리·3D 가 끼어들 수 있다.
- 씬에서 보여 주는 것: 체력바·점수·일시정지 버튼 HUD, Render Mode Overlay↔Camera 비교
- 확인 포인트: 체력바·점수·일시정지 버튼이 창 크기를 바꿔도 제 위치에 있는지 보세요. Render Mode 를 Overlay ↔ Camera 로 바꾸면 UI 가 후처리 영향을 받는지가 달라집니다.
0602
Canvas Scaler — 해상도별 UI 크기 맞춤
요청 예문: "1920x1080 기준으로 모바일에서도 UI가 깨지지 않게 Canvas Scaler를 설정해줘."
- 씬:
Assets/00_Scenes/06_UI/0602_CanvasScaler.unity - 핵심 스크립트:
CanvasScalerDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0602_CanvasScaler.cs - 구현 방식: 런타임 데모
- 개념: 해상도가 달라도 UI 크기를 일정하게 유지해 주는 컴포넌트. Scale With Screen Size + 기준 해상도(보통 1920x1080) 설정이 사실상 표준이고, 이걸 빼먹으면 기기마다 UI 크기가 제각각이 된다.
- 씬에서 보여 주는 것: 1920x1080 기준 Scale With Screen Size, 기기 해상도 미리보기
- 확인 포인트: 기기 해상도 미리보기를 바꿔 보세요. Scale With Screen Size 면 UI 비율이 유지되는데, Constant Pixel Size 로 바꾸면 작은 화면에서 UI 가 화면을 뒤덮습니다.
0603
Anchor / Pivot — UI 고정 기준점
요청 예문: "점수는 화면 오른쪽 위에 Anchor로 고정해줘."
- 씬:
Assets/00_Scenes/06_UI/0603_AnchorPivot.unity - 핵심 스크립트:
AnchorPivotDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0603_AnchorPivot.cs - 구현 방식: 런타임 데모
- 개념: Anchor 는 부모 중 어디를 기준으로 붙을지, Pivot 은 자기 자신의 어느 점을 기준으로 위치·회전·크기를 적용할지를 정한다. 해상도 대응이 깨지는 대부분의 원인이 Anchor 설정이다.
- 씬에서 보여 주는 것: 오른쪽 위 Anchor 고정 점수 vs 가운데 Anchor, Pivot 회전 중심
- 확인 포인트: 창 크기를 바꿔 보세요. 오른쪽 위 Anchor 점수는 모서리에 붙어 있고, 가운데 Anchor 요소는 중앙을 유지합니다. Pivot 을 옮기면 회전 중심이 바뀌는 것도 보세요.
0604
TextMeshPro (TMP) — 선명한 글자 컴포넌트
요청 예문: "TextMeshPro로 한글 폰트 에셋을 만드는 법 알려줘."
- 씬:
Assets/00_Scenes/06_UI/0604_TextMeshPro.unity - 핵심 스크립트:
TmpFontDemo, GuidePages - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0604_TextMeshPro.cs - 구현 방식: 설명 + 대체 구현
- 개념: SDF 방식으로 글자를 그려 확대해도 선명하고, 외곽선·그림자·그라데이션을 지원하는 텍스트 컴포넌트. 한글은 글자 수가 많아 Dynamic 아틀라스로 필요한 글자만 그때그때 굽는 설정이 거의 필수다.
- 씬에서 보여 주는 것: 한글 동적 폰트 아틀라스가 채워지는 모습, Font Asset Creator 단계
- 확인 포인트: 글자를 입력해 아틀라스가 실시간으로 채워지는 모습을 보세요. 처음 쓰는 글자가 추가되는 순간이 보입니다. 패널의 Font Asset Creator 단계도 함께 읽어 보세요.
0605
Layout Group — 자동 정렬 (가로·세로·격자)
요청 예문: "Grid Layout Group으로 4x5 인벤토리 칸을 자동 배치해줘."
- 씬:
Assets/00_Scenes/06_UI/0605_LayoutGroup.unity - 핵심 스크립트:
InventoryGridDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0605_LayoutGroup.cs - 구현 방식: 런타임 데모
- 개념: 자식 UI 를 가로·세로·격자로 자동 배치해 주는 컴포넌트. 항목 수가 변하는 목록·인벤토리에서 좌표를 직접 계산하지 않게 해 준다.
- 씬에서 보여 주는 것: Grid Layout Group 4x5 인벤토리 자동 배치
- 확인 포인트: 인벤토리 칸이 4x5 격자로 자동 정렬되는지 보세요. 아이템을 추가·제거하면 좌표를 건드리지 않아도 재배치됩니다.
0606
Scroll View — 스크롤 목록
요청 예문: "Scroll View에 상점 아이템 목록을 동적으로 생성해줘."
- 씬:
Assets/00_Scenes/06_UI/0606_ScrollView.unity - 핵심 스크립트:
ShopScrollDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0606_ScrollView.cs - 구현 방식: 런타임 데모
- 개념: 보이는 영역(Viewport)보다 큰 내용(Content)을 잘라 보여 주고 스크롤하게 하는 묶음. Mask + Content 크기 + Layout 조합이고, Content 크기가 자동으로 안 늘면 스크롤이 안 되는 흔한 함정이 있다.
- 씬에서 보여 주는 것: Scroll View에 상점 아이템 동적 생성·구매
- 확인 포인트: 상점 목록을 스크롤해 보세요. 아이템을 동적으로 추가해도 스크롤 범위가 함께 늘어납니다. 범위를 벗어난 항목이 잘려 보이는지도 확인해 보세요.
0607
월드 스페이스 UI — 캐릭터 머리 위에 떠 있는 UI
요청 예문: "적 머리 위에 World Space 체력바를 띄우고 항상 카메라를 보게 해줘."
- 씬:
Assets/00_Scenes/06_UI/0607_WorldSpaceUI.unity - 핵심 스크립트:
WorldHealthBar, WorldSpaceUIDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0607_WorldSpaceUI.cs - 구현 방식: 런타임 데모
- 개념: Canvas 를 World Space 로 두어 3D 공간에 UI 를 세우는 방식. 적 머리 위 체력바·이름표에 쓰며, 카메라를 보도록 매 프레임 돌려 주는 처리(빌보드)가 보통 함께 필요하다.
- 씬에서 보여 주는 것: 적 머리 위 World Space 체력바, 빌보드 비교
- 확인 포인트: 카메라를 돌려 보세요. 빌보드를 켠 체력바는 항상 정면을 보고, 끄면 옆에서 납작하게 보입니다. 거리가 멀어지면 작게 보이는 것도 Overlay UI 와 다른 점입니다.
0608
체력바 (딜레이 감소) — 깎인 부분이 늦게 따라 줄어듦
요청 예문: "체력바가 즉시 줄고 뒤의 흰 바가 0.5초 뒤 따라오게 해줘."
- 씬:
Assets/00_Scenes/06_UI/0608_HealthBarDelay.unity - 핵심 스크립트:
DelayedHealthBar, HealthBarDelayDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0608_HealthBarDelay.cs - 구현 방식: 런타임 데모
- 개념: 체력이 깎일 때 본 바를 즉시 줄이고, 흰 바를 조금 늦게 따라 줄이는 연출. 얼마나 깎였는지를 눈으로 보여 줘서 같은 수치 변화를 더 극적으로 만든다.
- 씬에서 보여 주는 것: 체력바 즉시 감소 + 흰 바 0.5초 뒤 따라옴
- 확인 포인트: 피해를 입혀 보세요. 색 바가 즉시 줄고, 흰 바가 0.5초 뒤 따라 줄어듭니다. 연속으로 맞으면 흰 바가 누적되어 더 크게 보입니다.
0609
쿨타임 UI (Radial Fill) — 원형으로 차오르는 쿨다운
요청 예문: "Image Fill Method Radial 360으로 스킬 쿨타임 UI를 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0609_CooldownRadial.unity - 핵심 스크립트:
SkillCooldownSlot, CooldownDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0609_CooldownRadial.cs - 구현 방식: 런타임 데모
- 개념: Image 의 Fill 기능으로 쿨다운 남은 시간을 원형으로 보여 주는 UI. 숫자보다 직관적이어서 액션 게임 스킬 표시의 표준이다.
- 씬에서 보여 주는 것: Image Fill Radial 360 스킬 쿨타임 UI
- 확인 포인트: 스킬을 쓰고 원형 덮개가 시계 방향으로 줄어드는지, 다 줄어드는 순간 다시 쓸 수 있는지 보세요.
0610
대화 시스템 / 타자 효과 — 대사창, 한 글자씩 출력
요청 예문: "NPC 대화창에서 글자가 한 글자씩 나오고 클릭하면 전부 표시되게 해줘."
- 씬:
Assets/00_Scenes/06_UI/0610_DialogueTypewriter.unity - 핵심 스크립트:
DialogueTypewriter - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0610_DialogueTypewriter.cs - 구현 방식: 런타임 데모
- 개념: 대사를 한 글자씩 출력해 읽는 속도를 만들어 주는 연출. 클릭하면 전부 즉시 표시하는 건너뛰기를 반드시 넣어야 답답하지 않다.
- 씬에서 보여 주는 것: 한 글자씩 출력, 클릭하면 전부 표시
- 확인 포인트: 대사가 한 글자씩 나오는지 보고, 출력 중에 클릭해 전부 즉시 표시되는지 확인해 보세요. 다 나온 뒤 클릭하면 다음 대사로 넘어갑니다.
0611
팝업 / 모달 — 확인·취소 창
요청 예문: "'정말 나가시겠습니까?' 확인 팝업을 재사용 가능하게 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0611_PopupModal.unity - 핵심 스크립트:
ConfirmPopup, PopupDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0611_PopupModal.cs - 구현 방식: 런타임 데모
- 개념: 확인·취소를 묻고 그 전까지 뒤쪽 조작을 막는 창. 뒤를 막는 투명 차단막(모달)이 없으면 창 뒤의 버튼이 눌리는 버그가 생긴다.
- 씬에서 보여 주는 것: 재사용 확인/취소 팝업, 모달 차단막
- 확인 포인트: 팝업을 띄워 뒤쪽 버튼이 눌리지 않는지 확인해 보세요. 확인/취소 콜백을 다르게 넘겨 같은 팝업을 재사용하는 구조도 함께 보세요.
0612
일시정지 메뉴 — Time.timeScale 0 + 메뉴
요청 예문: "ESC로 일시정지 메뉴(계속, 설정, 메인으로)를 열어줘."
- 씬:
Assets/00_Scenes/06_UI/0612_PauseMenu.unity - 핵심 스크립트:
PauseMenuController - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0612_PauseMenu.cs - 구현 방식: 런타임 데모
- 개념: Time.timeScale 을 0 으로 만들어 게임을 멈추고 메뉴를 띄우는 처리. timeScale 0 에서는 Update 의 시간 기반 처리가 멈추므로, UI 애니메이션은 unscaledDeltaTime 을 써야 한다.
- 씬에서 보여 주는 것: ESC 일시정지 메뉴(계속·설정·메인으로), timeScale 0
- 확인 포인트: ESC 로 일시정지해 캐릭터와 이펙트가 멈추는지, 그 상태에서 메뉴 버튼은 정상 동작하는지 보세요. 계속하기를 누르면 timeScale 이 1 로 돌아옵니다.
0613
드래그 앤 드롭 — UI를 끌어다 놓기
요청 예문: "IDragHandler로 인벤토리 아이템을 드래그해서 슬롯끼리 교환해줘."
- 씬:
Assets/00_Scenes/06_UI/0613_DragAndDrop.unity - 핵심 스크립트:
DragItem, InventorySlot - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0613_DragAndDrop.cs - 구현 방식: 런타임 데모
- 개념: IBeginDragHandler · IDragHandler · IDropHandler 인터페이스로 UI 를 끌어다 놓는 처리. 인벤토리 정렬·장비 장착·카드 게임에 쓴다.
- 씬에서 보여 주는 것: IDragHandler로 인벤토리 아이템 슬롯 교환
- 확인 포인트: 아이템을 다른 칸으로 끌어다 놓아 서로 교환되는지 보세요. 빈 칸에 놓으면 이동하고, 칸 밖에 놓으면 원래 자리로 돌아옵니다.
0614
툴팁 (Tooltip) — 마우스 올리면 설명
요청 예문: "아이템에 마우스를 올리면 이름과 설명 툴팁을 띄워줘."
- 씬:
Assets/00_Scenes/06_UI/0614_Tooltip.unity - 핵심 스크립트:
TooltipTrigger, TooltipView - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0614_Tooltip.cs - 구현 방식: 런타임 데모
- 개념: 마우스를 올렸을 때 설명을 띄우는 UI. 화면 밖으로 넘치지 않게 위치를 보정하고, 살짝 지연을 두어 지나갈 때마다 뜨지 않게 하는 처리가 중요하다.
- 씬에서 보여 주는 것: 마우스를 올리면 이름·설명 툴팁
- 확인 포인트: 아이템에 마우스를 올려 이름·설명 툴팁이 뜨는지, 화면 가장자리에서도 툴팁이 잘리지 않는지 보세요.
0615
미니맵 — 위에서 본 작은 지도
요청 예문: "Render Texture와 탑뷰 카메라로 미니맵을 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0615_Minimap.unity - 핵심 스크립트:
MinimapController - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0615_Minimap.cs - 구현 방식: 런타임 데모
- 개념: 위에서 내려다보는 카메라의 화면을 Render Texture 로 받아 UI 에 띄우는 방식. 아이콘만 그리려면 전용 레이어를 쓰고, 줌·회전·플레이어 중심 고정은 UI 쪽에서 처리한다.
- 씬에서 보여 주는 것: 탑뷰 카메라 + Render Texture 미니맵, 아이콘·줌
- 확인 포인트: 이동하며 미니맵 안의 아이콘이 함께 움직이는지, 줌을 바꾸면 보이는 범위가 달라지는지 보세요.
0616
로딩 화면 (비동기 로딩) — 진행률 표시하며 씬 로드
요청 예문: "LoadSceneAsync로 진행률 바가 있는 로딩 화면을 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0616_AsyncLoading.unity - 핵심 스크립트:
AsyncSceneLoader - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0616_AsyncLoading.cs - 구현 방식: 런타임 데모
- 개념: LoadSceneAsync 로 씬을 백그라운드에서 읽으며 진행률을 보여 주는 화면. progress 가 0.9 에서 멈추는 동작(활성화 대기)을 알고 있어야 진행률 바가 어색하지 않다.
- 씬에서 보여 주는 것: LoadSceneAsync 진행률 바 로딩 화면
- 확인 포인트: 로딩을 시작해 진행률 바가 차오르다 90% 에서 잠깐 머물고 완료되는지 보세요. 로딩 중에도 화면이 멈추지 않고 애니메이션이 도는지 함께 보세요.
0617
조이스틱 (모바일) — 화면 가상 조이스틱
요청 예문: "모바일용 가상 조이스틱과 점프 버튼을 만들어줘."
- 씬:
Assets/00_Scenes/06_UI/0617_VirtualJoystick.unity - 핵심 스크립트:
VirtualJoystick, JumpButton - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0617_VirtualJoystick.cs - 구현 방식: 런타임 데모
- 개념: 터치 위치를 기준으로 방향 입력을 만들어 주는 화면 UI. 손가락이 닿은 곳을 중심으로 잡는 방식(동적 조이스틱)이 고정식보다 조작이 편하다.
- 씬에서 보여 주는 것: 모바일 가상 조이스틱 + 점프 버튼
- 확인 포인트: 조이스틱을 끌어 캐릭터가 그 방향으로 움직이는지, 중앙에서 벗어난 거리만큼 속도가 달라지는지 보세요. 손을 떼면 중앙으로 돌아옵니다.
0618
세이프 에어리어 (Safe Area) — 노치 영역 피하기
요청 예문: "아이폰 노치에 UI가 가리지 않게 Safe Area를 적용해줘."
- 씬:
Assets/00_Scenes/06_UI/0618_SafeArea.unity - 핵심 스크립트:
SafeAreaFitter, SafeAreaDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/06_UI/Build0618_SafeArea.cs - 구현 방식: 런타임 데모
- 개념: 노치·펀치홀·둥근 모서리에 UI 가 가리지 않도록 Screen.safeArea 영역 안에 배치하는 처리. 모바일 출시에서 빼먹기 쉬운 항목이다.
- 씬에서 보여 주는 것: 노치 흉내 + Screen.safeArea 앵커 적용
- 확인 포인트: 노치 흉내 영역을 켜 보세요. Safe Area 를 적용한 UI 는 노치를 피해 내려오고, 끄면 점수나 버튼이 노치에 가립니다.