UI
UI 형태
IMGUI (Immediate Mode GUI) 즉시 모드 GUI
- 코드를 이용해 UI를 표시하는 방법
- 개발 과정에서 간단한 테스트용으로 사용
- OnGUI 함수에서 코드를 구현
- OnGUI 메서드는 Update와 같이 매 프레임마다 실행 됨, 테스트 이후에는 제거해야함
using UnityEngine;
public class IMGUIDemo : MonoBehaviour
{
private void OnGUI()
{
GUI.Label(new Rect(10,10,200,50), "SpaceShooter");
if (GUI.Button(new Rect(10,60,100,30), "START"))
{
Debug.Log("START button Clicked!");
}
}
}
UI Toolkit
- UXML(Unity XML), USS(Unity Style Sheets) 와 같은 UI Asset 파일로 UI 스타일을 정의하고 디자인함
- 위치, 크기, 정렬 등의 속성을 수치로 관리하기 때문에 정확한 디자인을 하기에 매우 유리한 방식
- UI 전문 개발자에게 매우 편리한 도구 🔅 Menu => Window => UI Toolkit => UI Builder
Unity UI (UGUI)
- 게임오브젝트 기반의 UI 모든 구성요소를 게임오브젝트로 관리
- 레이블, 버튼, 슬라이드 바, 패넝 등과 같은 UI요소는 게임오브젝트에 추가하는 컴포넌트 형태로 구현
- Scene View 에서 직접 보면서 UI를 배치하고 조정할 수 있다는 장점이 있음
Canvas Object
- Canvas Object는 Canvas Component를 포함하고 있는 게임오브젝트의 일종
- ❗️ 모든 UI 요소(UI element)는 반드시 Canvas Object 하위에 위치해야함
- Canvas Object는 기존 GameObject에 있던
Transform
대신Rect Transform
Component를 가짐 - Canvas Object는 한 Scene에서 여러 개 생성하거나 다른 Canvas Object의 하위로 Child화 할 수 있다.
EventSystem Object
- Canvas Object 생성 시 자동으로 생성 됨
- 시스템에서 발생하는 키보드, 조이스틱, 스크린 터치 등의 입력 정보를 Canvas 하위의 UI Element에 전달
Event System Component
- First Selected 속성을 이용 처음 포커스를 갖는 UI 항목을 지정
- Event system Component가 없으면 UI 항목이 클릭 또는 터치와 같은 다양한 입력 이벤트에 반응하지 않음
Canvas Object Components
🔆 같은 Canvas 컴포넌트이지만 하위 컴포넌트로 Rect Transform을 수정할 수 있음
Rect Transform
- UI 항목이 반드시 가지고 있는 Component
- Anchors, Pivot, 크기(W,H), 위치 (Pos X, Pos Y, Pos Z)와 Rotation, Scale 정보를 저장하고 있음
-
처음 생성된
Canvas Object는 Rect Transform 속성에 대한 직접적 수정이 불가 (화면 크기에 따라 다름)Anchors (앵커)
-
용도: 앵커는 UI 요소가 부모
RectTransform
에 어떻게 배치되고 크기가 조정되는지를 결정 -
동작 방식: 앵커는 부모
RectTransform
내의 상대적 위치를 표현합니다.
예를 들어, 앵커가 왼쪽 상단에 위치하면 그 UI 요소도 부모의 왼쪽 상단에 붙음 -
종류: 앵커는 단일 포인트 또는 범위가 될 수 있습니다.
범위를 사용하면 부모의 크기 변화에 유연하게 대응할 수 있습니다.Pivot (피벗)
- 용도: 회전과 스케일링의 기준점을 설정합니다.
-
동작 방식: 피벗은
RectTransform
의 로컬 좌표계 내에서 정의
(0,0)은 왼쪽 하단, (1,1)은 오른쪽 상단입니다. -
응용: 예를 들어, 피벗을 (0.5, 0.5)로 설정하면 회전과 스케일링은
RectTransform
의 중심을 기준
Canvas Component
- UI 항목을 화면에 배치하고 렌더링 하는 역할
- Render Mode 옵션에 따라 UI 항목의 화면 배치 방식을 결정
Render Mode - enum type
Screen Space - Overlay
- Default 항목은 Scene의 가장 상위 계층에 표현 됨
- 일반적인 UI 구성에 사용하며, 어떠한 3D 객체에 의해서도 가려지지 않는다.
- Canvas 크기는 화면의 해상도에 맞춰 자동으로 스케일 조정 됨
Screen Space - Camera
- Overlay와 같이 가장 상위에 UI 항목이 표시 됨
- 다른점은 UI 항목을 렌더링하는 별도의 카메라를 설정할 수 있음
- 씬 전체를 비추는 Main Camera와 별도의 UI만을 위한 Camera를 설정 가능
❗️ 별도의 Camera 선택 시 Audio Listner
컴포넌트를 제거 하야한다.
World space
- World Space 옵션은 Scene에 있는 다른 게임오브젝트에 직접 UI 항목을 추가
- HUD나 VR, AR 컨텐츠의 UI를 구현할 때 사용
- World Space로 설정하면, Rect Transform에 영향을 받지 않고, 오브젝트 Position에 영향을 받는다.
- Overlay로 설정한 Canvas는 물리적 위치를 변경할 수 없지만, World Space로 설정하면 위치설정 가능
Image Component
- 화면에 텍스쳐를 표시하는 컴포넌트
- Sprite 타입으로 변환된 텍스쳐만 사용 가능
|속성|설명|
|:–|:–|
|Source Image|화면에 표시하려는 이미지 (Sprite만 허용)|
|Color|이미지의 색상 지정(RGBA)|
|Material|이미지를 렌더링 하기 위한 Material(Normal Map 적용 시 사용 가능)|
|Image Type|Simple : 반복이 필요 없거나 이미지가 고정 크기인 경우의 옵션
Sliced : 이미지를 리사이즈해도 왜곡 없이 표현하는 옵션
Tiled : 이미지를 타일링 처리할 수 있는 옵션
Filled : 이미지를 부분적으로 채울 수 있는 옵션|
Image Type - enum
Simple
- 일반적으로 고정 크기를 갖는 이미지
- 반복 및 별도의 다른 기능이 필요 없을 때 사용
- Perserve Aspect 선택 시 이미지 크기를
원본 사이즈
에 맞게 자동으로 비율 조절 - Set Native Size 선택 시 원본 이미지의 크기로 재설정 됨
Sliced
-
이미지의 크기를 조절 해도 외곽선이 뭉개지거나 깨지지 않게 설정 가능
- Border Line에 의해 나눠진 9개의 Sliced 된 이미지 조각들이 이미지의 크기가 바뀌어도
해당 위치의 부분 이미지만 잘라와서 표현하는 방식으로 외곽선이 깨지지 않음 - 가변적인 window를 제작할 때 유용
- Fill Center는 9번 이미지를 표시 할 것인지 아닌지 선택하는 옵션
Tiled
- 이미지가 반복적인 패턴일 때 동일한 패턴이 반복적으로 표시
- Tiled 선택 시 해당 Sprite 의 Warp Mode 가
Repeat
가 아니면 해당 Warning Comment 가 발생
Wrap Mode | 설명 |
---|---|
Repeat | 텍스처를 반복하는 옵션 |
Clamp | 텍스처를 반복하지 않고 늘리는(Stretch) 옵션 |
Mirror | 미러링 처리를 해서 반복하는 옵션 |
Mirror Once | 미러링 처리 후 한 번만 반복하는 옵셥 |
Per-axis | UV 축별로 Repeat, Clamp를 지정하는 옵션 |
Filled
- 이미지를 특정 방향으로 채워서 그릴 수 있음
- Fill Method : 채워지는 방향 설정
- Fill Origin : 어느 위치에서부터 채울 것인지 설정
Fill Method Type | 설명 | Clockwise(시계방향) 속성 |
---|---|---|
Horizontal | 가로 방향으로 이미지가 채워짐 | X |
Vertical | 세로 방향으로 이미지가 채워짐 | X |
Radial90 | 이미지가 90도 각도까지 채워짐 | O |
Radial180 | 이미지가 180도 각도까지 채워짐 | O |
Radial360 | 이미지가 360도 각도까지 채워짐 | O |
Horizontal | Vertical | Radial90 | Radial180 | Radial360 |
---|---|---|---|---|
Z - Order
- Unity UI 는 Z - Order의 개념을 Hierarchy View의 순서로 결정
- 이 순서가 위로 갈 수록 UI는 아래에 깔린다고 보면 된다.