ゲーム解像度を変更する

ページ更新日 :
ページ作成日 :

検証環境

Windows
  • Windows 11
Unity エディター
  • 2021.3.1f1
入力システムパッケージ
  • 1.3.0

この Tips の前提設定

この Tips の説明の前提として以下の設定を事前に行っています。

ゲーム開始時の解像度の指定

ゲーム開始時の解像度はプロジェクト設定から設定することができます。 ただし、ウィンドウモード前提など制限があるので確実に設定する場合は後述するプログラムによる設定のほうが確実だと思います。

設定するにはメニューから「編集 -> プロジェクト設定」を選択します。

左のメニューから「プレイヤー」を選択します。

下にほうに環境ごとの設定があります。例えば一番左のディスプレイアイコンであれば Windows などの PC 環境の設定となります。

中に「解像度と表示」が折りたたまれているのでクリックして展開し、解像度グループにある「全画面モード」から「ウィンドウ化」を選択します。

すると「デフォルトの画面幅」と「デフォルトの画面の高さ」が表示されるのでここで解像度(=画面のサイズ)を設定できます。 この設定はウィンドウモードの時にしか設定できません。

他の環境でも設定があるので確認してみてください。以下の図は WebGL での設定です。解像度=キャンバスのサイズとなります。

実行して確認

Unity エディターで実行しても正しいかどうか確認できないのでゲームを出力して確認してみます。 詳しい手順はゲーム出力の Tips を参照してください。

指定した画面サイズで表示されることを確認してください。

ただしサイズの数値を変えてもサイズが変わらない場合があります。これはゲーム自体が前回の解像度を記憶しているためです。 確実に指定した解像度で表示させたい場合は後述のプログラムで変更する方が確実です。

プログラムから解像度を変更する

ここでは以下のような画面を用意して各ボタンをクリックしたときに解像度を変更するようにプログラムで制御してみたいと思います。 UI やボタンの処理の仕方については UI 関連の Tips を参照してください。

以下は各ボタンをクリックしたときに処理される内容です。

using UnityEngine;

public class ButtonEvent : MonoBehaviour
{
  public void OnClick_960x540()
  {
    // 横幅 pixel、縦幅 pixel、ウィンドウモード、リフレッシュレート(Hz) を指定
    // ウィンドウモードの場合、ウィンドウサイズも変わる
    Screen.SetResolution(960, 540, FullScreenMode.Windowed, 60);
  }
  public void OnClick_1280x720()
  {
    // 横幅 pixel、縦幅 pixel、ウィンドウモード、リフレッシュレート(Hz) を指定
    // ウィンドウモードの場合、ウィンドウサイズも変わる
    Screen.SetResolution(1280, 720, FullScreenMode.Windowed, 60);
  }
  public void OnClick_1600x900()
  {
    // 横幅 pixel、縦幅 pixel、ウィンドウモード、リフレッシュレート(Hz) を指定
    // ウィンドウモードの場合、ウィンドウサイズも変わる
    Screen.SetResolution(1600, 900, FullScreenMode.Windowed, 60);
  }
}

下2つのメソッドについては解像度の数値が違うだけです。

Screen.SetResolution メソッドの引数にそれぞれ「解像度の幅(px)」「解像度の高さ(px)」「フルスクリーンモード」「リフレッシュレート(Hz)」を指定することにより解像度を変更することができます。

今回ウィンドウモードでの設定になりますがフルスクリーンモードでも同様の方法で設定が可能です。

ゲーム起動時に強制的に設定したい場合は最初のシーンの何らかのオブジェクトにアタッチしたスクリプトの awake メソッドで処理すれば良いかと思います。

実行して確認

各ボタンをクリックすると解像度(+ウィンドウサイズ)が変わることを確認できると思います。