본문 바로가기
Programming/Unity

[Unity3D] 스크립트에서 UI 크기 변경 - RectTransform(stretch 포함)

by 타임박스 2022. 1. 6.
반응형


✔ RectTransform - UI size script로 변경하기

Get recttransform stretch top, left, right, bottom size and resize



 

UI를 생성하면 기본적으로 RectTransform이 생성되며 Anchor Presets는 중앙에 위치한 상태로 생성된다.

Image UI를 생성한 초기상태

위에서 생성된 UI는 width, height가 각각 100으로 정사각형 형태다.

그럼 저 width, height의 값을 어떻게 코드로 가져올 수 있을까?

RectTransform에서는 width, height는 sizeDelta에서 찾을 수 있다.

아래는 확인한 결과 코드이다.

RectTransform rectTransform = GetComponent<RectTransform>();
Debug.Log(rectTransform.sizeDelta.x);   //100
Debug.Log(rectTransform.sizeDelta.y);   //100

//UI 크기를 가로 150, 200으로 변경
rectTransform.sizeDelta = new Vector2(150, 200);
Debug.Log(rectTransform.sizeDelta.x);   //150
Debug.Log(rectTransform.sizeDelta.y);   //200

//Game View에서 150,200으로 크기가 변경된 것을 확인할 수 있다.

이렇게 sizeDelta 값을 변경하여 UI크기를 변경할 수 있습니다.

가끔 UI 크기를 scale로 변경하시는 분들이 있는데 비추천합니다.... 하위 자식들 위치 다 깨질 수 있습니다.

하지만 sizeDelta로 변경하지 못하는 경우도 있습니다.

 

● Anchor Presets이 stretch인 경우

stretch 이미지

Anchor Presets을 stretch로 변경하면 width, height는 사라지고 left, top, right, bottom으로 변경된다.

stretch는 기준해상도 크기에서 UI를 꽉채운 상태에서 잘라낸다는 형태로 보시면 됩니다.

위 이미지 기준으로 설명드리겠습니다.

기준해상도 : 1920 * 1080

- Top : 화면 위(기준 y좌표 1080)에서 부터 아래로 980만큼 UI를 잘라냄 -> 1080(기준 y좌표) - 980 = 100만큼 남음

Top에서 980만큼 자른상태

- Bottom : 화면 아래(기준 y좌표 0)에서 부터 위로 0만큼 UI를 잘라냄 -> 0(기준 y좌표) - 0 = 0 (자를게 없음)

- Right : 화면 오른쪽(기준 x좌표 1920)에서 부터 왼쪽으로 1820만큼 UI를 잘라냄 -> 1920(기준 x좌표) - 1820 = 100

Top이후 Right 1820만큼 자른 상태

- left : 화면 왼쪽(기준 x좌표 0)에서 부터 오른쪽으로 0만큼 UI를 잘라냄 -> 0(기준 x좌표) - 0= 0 (자를게 없음)

이렇게 UI 크기는 100, 100인것을 알 수 있다.

그럼 스크립트에서 UI사이즈를 width, height는 어떻게 가져와서 변경할수 있을까?

아래는 예제는 UI 100, 100 크기를 200,200 크기로 변경하는 코드입니다.

//UI 크기 확인
RectTransform rectTransform = GetComponent<RectTransform>();

float width = rectTransform.rect.width;
float height = rectTransform.rect.height;
Debug.Log(width);    //100
Debug.Log(height);   //100


//UI 크기 변경
/*Left*/
float Left = rectTransform.offsetMin.x;
/*Bottom*/
float Bottom = rectTransform.offsetMin.y;

/*Right*/
float Right = rectTransform.offsetMax.x;
/*Top*/
float Top = rectTransform.offsetMax.y;

//Left, Bottom 변경
rectTransform.offsetMin = new Vector2(0, 0);
//Right, Top 변경 -> 원하는 크기 - 기준해상도값
rectTransform.offsetMax = new Vector2(200 - Screen.width, 200 - Screen.height);

//크기 확인
width = rectTransform.rect.width;
height = rectTransform.rect.height;

Debug.Log(width);    //200
Debug.Log(height);   //200

※ 주의사항 : Right, Top의 경우는 Unity Inspector에서는 양수값으로 표현되지만 실제로는 음수값이 양수로 보여짐.

Left, Bottom의 경우에는 "Screen.width - 원하는 크기값"이고 Right, Top은 그 반대임.

 

감사합니다.

 

반응형

댓글