Posts 유니티 - UI(RectTransform)의 스크린 픽셀 크기 계산하기
Post
Cancel

유니티 - UI(RectTransform)의 스크린 픽셀 크기 계산하기

Note


모든 UGUI 요소는 RectTransform을 통해 크기를 결정한다.

그리고 RectTransform.rect로 크기를 참조할 수 있다.

그런데 이 크기는 해상도가 변해도 항상 같은 값을 반환한다.

따라서 해상도를 기반으로 하는 드래그 등의 기능을 구현할 때

마우스 변위를 해상도 값으로 가져오고, 이를 RectTransform에 적용하면

해상도가 달라졌을 때 원치 않는 동작을 하게 된다.

CanvasScaler를 이용하면 현재 스크린에 따른 실제 픽셀 크기를 계산할 수 있다.


크기 계산


  • CanvasScaler의 [UI Scale Mode]가 Scale With Screen Size일 경우에만 해당한다.


CanvasScalerReference Resolution 값, Match 비율과 현재 해상도에 따라

RectTransform의 스크린 픽셀 크기를 계산한다.

Match0 ~ 1 값을 가지며,

0일 때는 기준 해상도와 현재 해상도의 너비 비율에 따라 RectTransform의 크기를 계산하고,

1일 때는 기준 해상도와 현재 해상도의 높이 비율에 따라 계산한다.

0 ~ 1 사이일 때는 너비, 높이 각각의 비율을 합산하여 결과 비율값을 계산한다.


Source Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CanvasScaler cs;
RectTransform rt;

float wRatio = Screen.width  / cs.referenceResolution.x;
float hRatio = Screen.height / cs.referenceResolution.y;

// 결과 비율값
float ratio =
    wRatio * (1f - cs.matchWidthOrHeight) +
    hRatio * (cs.matchWidthOrHeight);

// 현재 스크린에서 RectTransform의 실제 너비, 높이
float pixelWidth  = rt.rect.width  * ratio;
float pixelHeight = rt.rect.height * ratio;
This post is licensed under CC BY 4.0 by the author.