오늘은 유니티의 게임 화면 해상도를 변경하는 법과
변경한 해상도에 맞춰 UI 위치를 조절 하는 방법에 대해 다뤄보도록 하겠습니다.
게임 화면의 해상도를 조절하는 방법은 다음과 같습니다.
Game 화면에서 Free Aspect 부분을 클릭하면 해상도를 설정 할 수 있습니다.
원하는 비율이 없다면 아래 + 버튼을 눌러
수치(가로, 세로)를 입력한 후 추가하여 사용 가능합니다.
해상도를 변경했더니 UI가 어색하게 보입니다.
이런 경우 어떻게 해야 할까요?
개발 환경과 실제로 플레이하는 화면의 해상도가 다를 때
UI 오브젝트가 화면 밖으로 나가버리거나 잘리거나 겹치는 상황이 발생할 수 있습니다.
이를 해결 할 수 있는 여러가지 방법이 있겠지만 그 중 몇가지를 소개해 보고자 합니다.
1. Canvas의 인스팩터 Canvas Scaler에서 설정을 통해 UI의 크기를 조절하는 방법.
UI를 생상하면 자동으로 Canvas가 만들어집니다.
Canvas를 살펴보면 Canvas Scaler를 통해 UI의 크기를 조절할 수 있습니다.
각 모드들에 대해 간단하게 설명하자면 다음과 같습니다.
Constant Pixel Size :
UI 요소가 화면 크기에 관계없이 동일한 픽셀 크기로 유지.
Scale With Screen Size :
화면이 커질수록 UI 요소도 커짐.
Constant Physical Size :
화면 크기와 해상도에 관계없이 UI 요소가 동일한 물리적인 크기로 유지
이를 활용하여 해상도가 변화하더라도 UI를 적절하게 배치 할 수 있습니다.
https://docs.unity3d.com/kr/2020.3/Manual/script-CanvasScaler.html
캔버스 스케일러 - Unity 매뉴얼
캔버스 스케일러(Canvas Scaler) 컴포넌트는 캔버스 내 UI 요소의 전체적인 스케일과 픽셀 밀도를 제어하는 데 사용됩니다. 스케일은 글꼴 크기와 이미지 경계 등 캔버스 아래의 모든 요소에 영향을
docs.unity3d.com
2. anchor(앵커)를 이용하여 UI의 위치를 조절하는 방법.
Rect Transform을 잘 보면 아래 네모난 그림이 있는 걸 알 수 있습니다.
클릭해보면 다음과 같은 창이 뜨는데 여기서 ALT키와 Shitf키를 동시에 누르고
원하는 방향 네모를 선택하면 화면 비율에 맞게 자동으로 조정 해줍니다.
https://docs.unity3d.com/kr/560/Manual/UIBasicLayout.html
기본 레이아웃 - Unity 매뉴얼
이 섹션에서는 UI 요소를 서로 간 비교하거나 캔버스와 비교하여 배치하는 방법에 대해 설명합니다. GameObject -> UI -> Image 메뉴에서 이미지를 생성하고 섹션을 참고하여 직접 테스트해 볼 수 있습
docs.unity3d.com
스크립트를 통해 상황에 맞게 해상도를 변경하고 싶다면 어떻게 해야 할까요?
이를 위해서 화면 해상도를 나타내는 구조체인 Resoultion 클래스가 있습니다.
Resolition은 다음과 같은 속성을 가집니다.
height:
픽셀 단위 해상도 높이
refreshRateRatio:
해상도의 수직 재생률을 Hz 단위로 표현
width:
픽셀 단위 해상도 너비
Resolution을 사용하기 위해선 추가로 다음을 활용합니다.
Screen.currentResolution :
현재 디스플레이의 해상도를 가져온다. Resolution형식으로 반환.
Screen.resolutions :
현재 디스플레이의 사용 가능한 모든 해상도를 가져와
너비별 정렬 한 다음 해상도 오름차순으로 정렬. Resolution 형식으로 반환.
Screen.SetResolution :
디스플레이의 해상도를 설정. 설정할 해상도와 전체 화면여부를 매개변수로 받음.
※ 일치하는 해상도가 지원되지 않으면 가장 가까운 해상도 사용.
0(기본값)인 경우 Unity는 모니터가 지원하는 가장 높은 화면 주사율로 전환.
아래 유니티 문서에 사용 예시 또한 나와 있으니 참고하시면 좋을 것 같습니다.
https://docs.unity3d.com/ScriptReference/Resolution.html
Unity - Scripting API: Resolution
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
https://docs.unity3d.com/ScriptReference/Screen.SetResolution.html
Unity - Scripting API: Screen.SetResolution
A width by height resolution is used. If no matching resolution is supported, the closest one is used. If preferredRefreshRate is 0 (default) Unity switches to the highest refresh rate that the monitor supports. If preferredRefreshRate is not 0 Unity uses
docs.unity3d.com
직접 사용해 보면서 참고했던 유튜브 입니다.
https://youtu.be/yeaELkoxD9w?si=UydahauyAQiLxmVd
영상에선 Resolution을 class로 정의해서 보다 손쉽게 화면 비율을 추가하여 사용하고 있습니다.
오늘은 해상도 조절하는 방법과 이에 따른 UI 조정에 대해 알아보았습니다.