게임을 즐기는 대부분의 사람들은 전체화면으로 게임을 하지만 개인적으로 나는 창모드로 게임을 하는 것을 좋아한다. 그래서 이번엔 해상도를 변경해서 창모드로 게임을 즐길수 있도록 설정을 만들 것이다.
먼저 위 사진처럼 UI의 Panel을 이용해서 설정창을 만들고, Panel에 Dropdown과 Button을 추가하여 원하는 해상도를 선택하고 적용버튼을 눌러서 해상도를 변경할 수 있도록 만들었다.
이제 본격적으로 스크립트를 추가하여 해상도를 변경하는 설정을 만들어보자.
일단 기본적으로 Screen.resolutions이라는 배열에 해당 기기가 지원하는 해상도가 모두 들어있다. 나는 16:9이며 60hz인 해상도를 사용할 것이기 때문에 Add함수를 이용해서 미리 만들어놨던 resolutions라는 리스트에 넣어줬다.
*resolution.width : 너비, resolution.height : 높이, resolution.refreshRate : 주사율
for (int i = 0; i < Screen.resolutions.Length; i++)
{
if (Screen.resolutions[i].refreshRate == 60 && (Screen.resolutions[i].width * 9 == Screen.resolutions[i].height * 16) && Screen.resolutions[i].width >= 1280)
{
resolutions.Add(Screen.resolutions[i]);
}
}
그리고 나는 너무 작은 해상도는 지원하지 않으려고, 너비가 1280이상인 해상도부터 리스트에 넣어줬다.
이제 밑작업은 끝났으니 본격적으로 Dropdown에 값을 넣어보자.
먼저 resolutionDropdown.options.Clear()
을 통해서 현재 Dropdown의 option에 들어있는 쓰레기값을 초기화해준다.
그리고 resolutions(너비 1280이상 16:9 해상도를 넣어둔 리스트)를 돌며 Dropdown의 option를 하나씩 만들어준다.
다음으로 옵션을 전부 추가해줬으면 새로고침을 한번해서 변경사항을 바로 적용시켜준다.
resolutionDropdown.options.Clear();
int optionNum = 0;
foreach (Resolution item in resolutions)
{
Dropdown.OptionData option = new Dropdown.OptionData();
option.text = item.width + " x " + item.height + " " + item.refreshRate + "hz";
resolutionDropdown.options.Add(option);
if (item.width == Screen.width && item.height == Screen.height)
{
resolutionDropdown.value = optionNum;
}
optionNum++;
}
resolutionDropdown.RefreshShownValue();
이렇게 Dropdown의 option을 전부 만들어줬으면, Dropdown에서 옵션을 변경하는 것을 판단하는 OnValueChange함수를 만들어서 적용시켜준다.
public void DropboxOptionChange(int x)
{
resolutionNum = x;
}
그리고 Screen.SetResolution(너비,높이,전체화면 여부)를 이용해서 옵션을 클릭하고 적용버튼을 누르면 해상도가 변경되는 OnClick함수를 만들어준다.
public void OkBtnClick()
{
Screen.SetResolution(resolutions[resolutionNum].width, resolutions[resolutionNum].height, false);
}
마지막으로 Canvas에서 Scale With Screen Size를 설정해주면 너비, 높이 비율에 맞춰서 해상도가 변경된다!