【Unity】ゲーム画面の解像度をC#スクリプトから変更する方法

ゲームの画面解像度の変更方法 ゲーム開発

Unityでゲームを作っていると、ゲームの設定項目として「画面の解像度(ウィンドウ表示の場合は画面サイズ)」を調整できるようにしたくなる場合があります。

プレイヤーさんのディスプレイの解像度は人によって様々だと思うので、やはりゲームを快適に遊んでもらうためにもオプション画面に

  • 画面の解像度
  • フルスクリーンにするかどうか

くらいは設定項目として用意しておきたいですよね。

そこでここでは上記のような項目をC#スクリプトから変更する方法についてご説明しますね。

画面解像度とフルスクリーン状態を取得・変更する方法

では早速ですが画面の解像度・フルスクリーンかどうかをC#スクリプトから取得したり変更したり数方法についてです。ここでは次の3つをご紹介します。

  1. 画面解像度とフルスクリーン状態を変更する関数
  2. 現在のゲーム画面の解像度を取得する方法
  3. ディスプレイが対応している解像度の取得方法

画面解像度とフルスクリーン状態を変更する関数

まず画面解像度とフルスクリーン状態を変更するには、Screenクラスの「Screen.SetResolution関数」を使います。

Unity - Scripting API: Screen.SetResolution

この関数の引数は次の3つとなっています。

  1. 第一引数:横幅
  2. 第二引数:縦幅
  3. 第三引数:フルスクリーンにするかどうか

例えば1920x1080pxの解像度・フルスクリーンに変更するのであれば

Screen.SetResolution(1920, 1080, true);

と書けばOKです。

現在のゲーム画面の解像度を取得する方法

次に現在のゲーム画面の解像度を取得するには

  • Screen.width
  • Screen.Height

にそれぞれアクセスすればOKです。

なお紛らわしいことにScreenクラスには「Screen.currentResolution」という変数もあるのですが、こちらにはゲーム画面ではなくデスクトップの解像度が入っているのでご注意ください。

ディスプレイが対応している解像度の取得方法

それからゲームを映しているディスプレイが対応している解像度を取得するには「Screen.resolutions」にアクセスすればOKです。この値を取得することで、手動で解像度のセットを用意しなくても丁度いい解像度の一覧を得ることができます。

この配列にはResolution型の値が入っているので、必要に応じて

  • Resolution.width
  • Resolution.height

を取得して使いましょう。

解像度・フルスクリーン状態を変更するUIの作り方

さてこれで必要な情報が揃ったので、あとはUIから解像度やフルスクリーン状態を変更できるようにしてみます。

注意:

  • 下記のC#スクリプトは自由に使っていただいて構いませんが、著作権は放棄しておりませんので作者を偽るのは厳禁とします。もし他の場所に掲載する場合は必ずクレジットを明記してください。
  • 画面の状態を保存したい場合は別途セーブ処理が必要になりますが、ここでは省略してあります。

解像度変更用のドロップダウンのC#スクリプト

ゲームの解像度の一覧を表示し、選択した解像度に変更するドロップダウンのC#スクリプトは次のとおりです。

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

namespace KurokumaSoft
{

    public sealed class ResolutionDropdown : MonoBehaviour
    {

        [SerializeField]
        TMP_Dropdown dropdown;

        List<Resolution> resolutions = new();

        void Start()
        {
            SetDropdown();
        }

        void SetDropdown()
        {
            resolutions.Clear();
            dropdown.ClearOptions();

            int currentIndex = 0;
            List<string> options = new();
            Resolution resolution;

            for(int i = 0; i < Screen.resolutions.Length; i++)
            {
                if (Screen.resolutions[i].width == Screen.width && Screen.resolutions[i].height == Screen.height)
                {
                    currentIndex = i;
                }

                resolution = new();
                resolution.width = Screen.resolutions[i].width;
                resolution.height = Screen.resolutions[i].height;
                resolutions.Add(resolution);

                options.Add(Screen.resolutions[i].width.ToString() + "x" + Screen.resolutions[i].height.ToString());
            }

            dropdown.AddOptions(options);
            dropdown.value = currentIndex;
            dropdown.onValueChanged.AddListener((x) => SetResolution(resolutions[x]));
        }

        void SetResolution(Resolution resolution)
        {
            Screen.SetResolution(resolution.width, resolution.height, Screen.fullScreen);
        }

        sealed class Resolution
        {

            public int width;
            public int height;

        }

    }

}

先ほどのScreen.resolutionsを活用してドロップダウンにディスプレイが対応する解像度の一覧を作成し、項目を変更したときに解像度を変更するようにしています。

フルスクリーン状態変更用のトグルのC#スクリプト

次に、フルスクリーン状態を切り替えるトグル(=チェックボックス)のC#スクリプトは次のようになります。

using UnityEngine;
using UnityEngine.UI;

namespace KurokumaSoft
{

    public sealed class FullScreenToggle : MonoBehaviour
    {

        [SerializeField]
        Toggle toggle;

        void Start()
        {
            SetToggle();
        }

        void SetToggle()
        {
            toggle.isOn = Screen.fullScreen;
            toggle.onValueChanged.AddListener((x) => SetScreenMode(x));
        }

        void SetScreenMode(bool isFullScreen)
        {
            Screen.fullScreen = isFullScreen;
        }

    }

}

おわりに

以上、ゲーム画面の解像度をC#スクリプトから変更する方法をご紹介しました。

プレイヤーさんの中には「解像度を変更できた方がいいなぁ」とか「フルスクリーンかウィンドウモードを選べないと嫌だな」という方は結構いらっしゃるようなので、もし手が回るようなら画面設定を用意しておいたほうが親切だと思います。ぜひ上記の内容を参考にしていただき、オプションを追加してみて頂ければと思います。

この記事がゲーム開発のお役に立てば幸いです。