Quick Reference
anchor는 부모 기준 영역, pivot은 자기 기준점을 정하며, 해상도 대응 문제는 좌표보다 anchor·pivot·Canvas Scaler·safe area 순서로 확인합니다.
- 기준 버전은 Unity 6.5 (6000.5), Unity UI (UGUI) 2.0.0입니다. anchor는 부모의 어느 영역에 붙는가, pivot은 자신의 어느 점을 기준으로 움직이고 커지는가를 정합니다.
- 한 점에 고정한 anchor에서는
Anchored Position과Width/Height가 주로 보이고, stretch anchor에서는Left/Right/Top/Bottomoffset이 주로 보입니다. - 해상도마다 UI가 어긋나면 좌표 숫자를 먼저 고치지 말고 anchor, pivot, Canvas Scaler, safe area 순서로 확인합니다.
Inspector 설정
RectTransform
- Anchor Min / Anchor Max는 부모 RectTransform 안의 정규화 좌표입니다.
(0, 0)은 좌하단,(1, 1)은 우상단입니다. 두 값이 같으면 한 점에 고정되고, 다르면 그 구간만큼 stretch합니다. - Anchored Position은 pivot이 anchor 기준점에서 떨어진 거리입니다. 우하단 버튼을
(1, 0)anchor와(1, 0)pivot으로 놓고(-24, 24)를 주면 오른쪽·아래 모서리에서 안쪽으로 24 px 들어옵니다. - Width / Height 또는
sizeDelta는 anchor 사이 거리와 비교한 크기입니다. anchor가 한 점이면 실제 크기와 같습니다. 부모 전체로 stretch한 상태에서는 부모보다 얼마나 더 크거나 작은지를 뜻하므로, 여백은Left/Right/Top/Bottom으로 읽는 편이 안전합니다. - Pivot도
0에서1범위입니다.(0.5, 0.5)는 중앙,(0, 1)은 좌상단입니다. 회전, scale, Content Size Fitter의 확장 방향 모두 pivot을 기준으로 합니다. - Layout Group이나 Content Size Fitter가 값을 구동하면 Inspector 값이 회색이거나 다시 바뀔 수 있습니다. 수동 배치 숫자를 계속 수정하기보다 어느 component가 구동하는지 먼저 확인합니다.
Canvas Scaler
- UI Scale Mode = Constant Pixel Size는 새 Canvas Scaler의 기본이며 해상도가 바뀌어도 UI 픽셀 크기를 유지합니다. 기본 Scale Factor는
1입니다. 고정 해상도 도구 화면에는 맞을 수 있지만, 다양한 모바일 화면의 기본 선택은 아닙니다. - Scale With Screen Size는 가장 일반적인 화면 UI 모드입니다. Reference Resolution은 레이아웃을 설계한 기준 픽셀 크기입니다. 가로 게임이면
1920 x 1080, 세로 게임이면1080 x 1920처럼 실제 기준 화면을 넣습니다. - 이 모드의 Screen Match Mode에서
Match Width Or Height를 고르면 Match가0일 때 width,1일 때 height를 우선합니다.0.5는 두 축을 중간으로 맞춥니다. 타깃 비율이 크게 다르면Expand또는Shrink을 시뮬레이터와 실기기에서 비교합니다. - Constant Physical Size는 인치·밀리미터 같은 물리 단위를 기준으로 합니다. Fallback Screen DPI는 기기가 DPI를 알려 주지 않을 때의 값이고, Default Sprite DPI는 sprite의 물리 크기 계산 기준입니다. 기기 DPI 신뢰도가 필요한 특수 UI가 아니라면 결과를 실제 기기에서 반드시 확인합니다.
- Reference Pixels Per Unit은 sprite의 Pixels Per Unit과 World Space UI 크기 계산에 연결됩니다. sprite import PPU와 다르면 아이콘이 다른 UI보다 크거나 작게 보일 수 있습니다.
스크립트 연결
RectTransform은 Transform을 상속하지만 UI 전용 위치·크기 API를 추가합니다. 현재 anchor 설정을 유지하면서 특정 축 크기만 정할 때는 sizeDelta 직접 대입보다 SetSizeWithCurrentAnchors가 의도를 더 정확히 드러냅니다.
using UnityEngine;
using UnityEngine.UI;
public sealed class SafeAreaPanel : MonoBehaviour
{
[SerializeField] private RectTransform panel;
[SerializeField] private CanvasScaler scaler;
private void Awake()
{
ApplySafeArea();
}
public void ApplySafeArea()
{
Rect safeArea = Screen.safeArea;
Vector2 min = safeArea.position;
Vector2 max = safeArea.position + safeArea.size;
panel.anchorMin = new Vector2(min.x / Screen.width, min.y / Screen.height);
panel.anchorMax = new Vector2(max.x / Screen.width, max.y / Screen.height);
panel.offsetMin = Vector2.zero;
panel.offsetMax = Vector2.zero;
}
public void UseLandscapeReference()
{
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920f, 1080f);
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
scaler.matchWidthOrHeight = 0.5f;
}
}// 현재 anchor 관계는 유지하고, 가로 계산 크기만 320 px로 설정합니다.
panel.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 320f);anchorMin,anchorMax,pivot,anchoredPosition,sizeDelta,offsetMin,offsetMax은 서로 독립된 여섯 개의 좌표처럼 다루면 안 됩니다. anchor 상태에 따라 Inspector가 같은 정보를 다른 이름으로 보여 줍니다.GetWorldCorners(Vector3[])는 UI의 실제 월드 모서리가 필요한 경우,ForceUpdateRectTransforms()는 해당 RectTransform 내부 계산을 즉시 최신화해야 하는 제한적인 경우에 씁니다. 일반적인 레이아웃 갱신을 매 프레임 강제하는 용도는 아닙니다.- safe area는 Canvas Scaler가 자동으로 처리하지 않습니다. 노치·홈 인디케이터를 피해야 하는 최상위 패널에
Screen.safeArea를 적용하고, 화면 회전이나 해상도 변경을 지원한다면 그 시점에도 다시 적용합니다.
자주 틀리는 부분
stretch anchor에서 sizeDelta만 만져 여백을 맞추면 의미가 뒤집힙니다. 전체 화면 배경이나 상단 바는 Left/Right/Top/Bottom offset으로 여백을 표현하고, 고정 크기 버튼은 anchor와 pivot을 한 점으로 맞춘 뒤 Anchored Position을 사용하세요.
Canvas Scaler의 Match 값은 만능 비율 보정이 아닙니다. Match = 0.5가 항상 정답은 아닙니다. 기준 해상도, 가로·세로 레이아웃, safe area, 긴 현지화 텍스트를 함께 확인해야 실제 기기에서 UI가 안전합니다.
참고 링크
2 sources