코드
using UnityEngine;
using UnityEngine.UI;
public class ResolutionManager : MonoBehaviour
{
public TMP_Dropdown resolutionDropdown;
private Resolution[] resolutions;
private void Start()
{
resolutions = Screen.resolutions;
resolutionDropdown.ClearOptions();
HashSet<string> options = new HashSet<string>();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + " x " + resolutions[i].height;
options.Add(option);
if (resolutions[i].width == Screen.currentResolution.width &&
resolutions[i].height == Screen.currentResolution.height)
{
currentResolutionIndex = i;
}
}
resolutionDropdown.AddOptions(new List<string>(options));
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
}
public void SetResolution(int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
}
}
Resolution이란?
화면 해상도를 나타내는 구조체입니다. Resolution 구조체는 다음과 같은 속성을 가지고 있습니다.
- width: 해상도의 너비를 픽셀 단위로 나타냅니다.
- height: 해상도의 높이를 픽셀 단위로 나타냅니다.
- refreshRate: 해상도의 수직 재생률을 Hz 단위로 나타냅니다.
Screen.resolutions는 현재 모니터에서 지원하는 모든 해상도를 Resolution 배열로 반환합니다.
세팅
드롭다운 UI를 생성해준 다음 방금 만든 ResolutionManager의 SetResolution을 할당해줍니다.
이때 반드시 SetResolution을 선택해주셔야 합니다. SetResolution(int)를 선택해선 안됩니다.
드롭다운 Options은 따로 설정할 필요 없습니다. 아까 만든 코드가 런타임 때 Options에 값들을 채워 넣을 것이기 때문입니다.
16:9, 16:10 해상도 코드
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
public class ResolutionManager : MonoBehaviour
{
public Dropdown resolutionDropdown;
private List<Resolution> resolutions = new List<Resolution>();
private int optimalResolutionIndex = 0;
private void Start()
{
resolutions.Add(new Resolution { width = 1280, height = 720 });
resolutions.Add(new Resolution { width = 1280, height = 800 });
resolutions.Add(new Resolution { width = 1440, height = 900 });
resolutions.Add(new Resolution { width = 1600, height = 900 });
resolutions.Add(new Resolution { width = 1680, height = 1050 });
resolutions.Add(new Resolution { width = 1920, height = 1080 });
resolutions.Add(new Resolution { width = 1920, height = 1200 });
resolutions.Add(new Resolution { width = 2048, height = 1280 });
resolutions.Add(new Resolution { width = 2560, height = 1440 });
resolutions.Add(new Resolution { width = 2560, height = 1600 });
resolutions.Add(new Resolution { width = 2880, height = 1800 });
resolutions.Add(new Resolution { width = 3480, height = 2160 });
resolutionDropdown.ClearOptions();
List<string> options = new List<string>();
for (int i = 0; i < resolutions.Count; i++)
{
string option = resolutions[i].width + " x " + resolutions[i].height;
// 가장 적합한 해상도에 별표를 표기합니다.
if (resolutions[i].width == Screen.currentResolution.width &&
resolutions[i].height == Screen.currentResolution.height)
{
optimalResolutionIndex = i;
option += " *";
}
options.Add(option);
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = optimalResolutionIndex;
resolutionDropdown.RefreshShownValue();
// 게임이 가장 적합한 해상도로 시작되도록 설정합니다.
SetResolution(optimalResolutionIndex);
}
public void SetResolution(int resolutionIndex)
{
Resolution resolution = resolutions[resolutionIndex];
Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
}
}