[TIL] Unity - Resolution - day 70

뭉크의 개발·2023년 10월 25일
0

Unity - Camp

목록 보기
39/70
post-thumbnail

🐧 들어가기 앞서

유니티에서 해상도를 변경하는 것은 게임이 다양한 화면 크기와 해상도를 가진 디스플레이에서 잘 동작하도록 하는 데 중요하다.

Resolution 클래스는 이를 가능하게 해준다.


🐧 오늘 배운 것

Resolution 클래스는 게임을 실행하는 디스플레이의 해상도를 나타내는 클래스로,

게임의 렌더링 해상도를 조절하고, 현재 디스플레이의 해상도 정보를 가져오는 데 사용된다.

Resolution은 다음과 같은 프로퍼티와 메서드를 가지고 있다.

프로퍼티

  • Width : 디스플레이의 가로 픽셀 수를 나타낸다.
  • Height : 디스플레이의 세로 픽셀 수를 나타낸다.
  • RefreshRate : 디스플레이의 주사율을 나타낸다. 주사율은 디스플레이가 초당 얼마나 많은 프레임을 그릴 수 있는지 나타내는 값이다.

메서드

  • Screen.currentResolution : 현재 디스플레이의 해상도를 가져온다. Resolution형식으로 반환된다.
  • Screen.resolutions : 현재 디스플레이의 사용 가능한 모든 해상도를 가져온다. Resolution 배열로 반환된다.
  • Screen.SetResolution : 디스플레이의 해상도를 설정한다. 설정할 해상도와 전체 화면여부를 매개변수로 받는다.

🐧 기억할 것 & 진행

⚙️ Setting

위 사진과 같이 세팅을 먼저 해주자.

해상도 텍스트, Dropdown이라는 UI 요소가 있는데 나는 TMP_Dropdown으로 생성했다.

전체화면을 나타내는 토글과 해상도 값을 적용하는 확인 버튼을 생성했다.

📜 Code

using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class VideoOption : MonoBehaviour
{
    FullScreenMode screenMode; // 현재 화면 모드를 저장하는 변수다. 전체 화면 모드인지, 창 모드인지 여부를 저장한다.

    public TMP_Dropdown resolutionDropdown; // 해상도를 변경할 수 있는 드롭다운 메뉴를 가리킨다.
    List<Resolution> resolutions = new List<Resolution>(); // 사용 가능한 모든 해상도를 저장하는 리스트다.
    public int resolutionNum; // 현재 선택된 해상도의 인덱스를 저장하는 변수다.
    int optionNum = 0; // 현재 해상도 옵션의 인덱스를 저장하는 변수다.

    public Toggle fullScreenBtn; // 전체 화면 모드를 토글하는 버튼을 가리킨다.

    private void Start()
    {
        InitUI();
    }

    private void InitUI() // 사용 가능한 모든 해상도를 가져와서 드롭다운 메뉴에 추가하고, 현재 화면 모드에 따라 토글 버튼의 상태를 설정한다.
    {
        resolutions.AddRange(Screen.resolutions);
        resolutions.Reverse();
        resolutionDropdown.options.Clear();

        foreach(Resolution item in resolutions)
        {
            TMP_Dropdown.OptionData option = new TMP_Dropdown.OptionData();
            option.text = item.width + "x" + item.height + "   " + item.refreshRateRatio + "hz";
            resolutionDropdown.options.Add(option);

            if (item.width == Screen.width && item.height == Screen.height)
                resolutionDropdown.value = optionNum;
            optionNum++;
        }
        resolutionDropdown.RefreshShownValue();

        fullScreenBtn.isOn = Screen.fullScreenMode.Equals(FullScreenMode.FullScreenWindow) ? true : false;
    }

    public void DropboxOptionChange(int x) // 드롭다운 메뉴에서 선택한 해상도의 인덱스를 resolutionNum에 저장하는 함수다.
    {
        resolutionNum = x;
    }

    public void FullScreenBtn(bool isFull) // 토글 버튼의 상태에 따라 화면 모드를 전체 화면 모드 또는 창 모드로 설정하는 함수다.
    {
        screenMode = isFull ? FullScreenMode.FullScreenWindow : FullScreenMode.Windowed;
    }

    public void ApplyBtn() // "적용" 버튼을 클릭하면 현재 선택된 해상도와 화면 모드로 화면 설정을 변경하는 함수다.
    {
        Screen.SetResolution(resolutions[resolutionNum].width, resolutions[resolutionNum].height, screenMode);
    }
}

🐧 게임에 구현한다면?

  • 이 모니터는 QHD 170hz로 설정되어있는 모니터다.

  • 이 모니터는 FHD 144Hz로 설정되어있는 모니터다.

아쉬운점은 빌드 상태에서만 해상도 변경을 확인할 수 있다.


🐧 내일 할 일

StartScene UI 배치 완성하기.

✅ Reference

0개의 댓글