PCゲームのオプション画面に必ずある「解像度」と「フルスクリーン」の設定——プレイヤーのモニターは1080pから4K・ウルトラワイドまで様々なので、遊ぶ側が選べることがPC向けリリースでは必須機能です。
Unityでは Screenクラス でこれらをスクリプトから制御できます。この記事では、動的な変更・表示モードの使い分け・オプション画面のドロップダウン実装・設定の保存までを解説します。
この記事でわかること
Screen.SetResolution()による解像度・表示モードの動的変更FullScreenMode4種の違い(主流はボーダーレス)- 実践:
Screen.resolutionsでオプション画面の解像度設定を完成させる- 起動時のデフォルト設定と設定の保存
Screenクラスによる動的な設定変更
Screenは静的クラスなので、どこからでもScreen.〜で直接使えます。
現在の状態を取得する
int width = Screen.width; // 現在のゲーム画面の幅(ピクセル)
int height = Screen.height; // 現在のゲーム画面の高さ
bool isFullScreen = Screen.fullScreen; // フルスクリーンかどうか
解像度と表示モードを変更する: SetResolution()
using UnityEngine;
public class ResolutionController : MonoBehaviour
{
// フルHDのボーダーレスフルスクリーンに設定
public void SetFullScreen1080p()
{
Screen.SetResolution(1920, 1080, FullScreenMode.FullScreenWindow);
}
// HDのウィンドウモードに設定
public void SetWindowed720p()
{
Screen.SetResolution(1280, 720, FullScreenMode.Windowed);
}
}
UIのButtonのOnClick()からこれらを呼べば、クリックで切り替わります。なおSetResolutionの反映は呼び出したフレームの末尾です。直後のScreen.widthはまだ古い値を返すことがある、と覚えておくとハマりません。
フルスクリーンだけを切り替える
解像度はそのままに表示モードだけ切り替えるなら、Screen.fullScreenへの代入が手軽です。
public void ToggleFullScreen()
{
Screen.fullScreen = !Screen.fullScreen;
}
FullScreenMode列挙型による表示モードの使い分け
bool引数版のSetResolutionは古い形式で、現在はFullScreenModeで詳細に指定するのが一般的です。
| モード | 説明 | 使いどころ |
|---|---|---|
| FullScreenWindow | ボーダーレス(画面全体に広がったウィンドウ) | 現在の主流。Alt+Tabがスムーズ |
| ExclusiveFullScreen | 排他的フルスクリーン | 描画性能を最優先したい場合(Windowsのみ) |
| Windowed | 通常のウィンドウ | ウィンドウ派のプレイヤー向け |
| MaximizedWindow | 最大化ウィンドウ | macOSのみ |

迷ったら、デフォルトはFullScreenWindow(ボーダーレス) にしておくのが現代の無難な選択です。
public void SetBorderlessFullScreen()
{
// モニターの現在の解像度いっぱいのボーダーレスにする
Resolution current = Screen.currentResolution;
Screen.SetResolution(current.width, current.height, FullScreenMode.FullScreenWindow);
}
実践:オプション画面の解像度設定を完成させる
Steam向けのインディーゲームでも、itch.ioの体験版でも、PCに出すなら避けて通れないのがオプション画面の 「解像度ドロップダウン+フルスクリーントグル+保存」の3点セット です。この記事の部品を組み合わせて完成させます。

鍵は**Screen.resolutions**です。「1920x1080」「2560x1440」…と決め打ちで並べると、プレイヤーのモニターが対応していない解像度を選べてしまいます。Screen.resolutionsなら、そのモニターが実際にサポートする解像度の一覧を取得できます。
using UnityEngine;
using System.Linq;
using TMPro;
public class ResolutionDropdown : MonoBehaviour
{
private const string PrefKey = "ResolutionIndex";
[SerializeField] private TMP_Dropdown dropdown;
private Resolution[] resolutions;
void Start()
{
// 同じ縦横でリフレッシュレート違いが並ぶため、サイズで重複を除く
resolutions = Screen.resolutions
.GroupBy(r => new { r.width, r.height })
.Select(g => g.Last()) // 各サイズの最高リフレッシュレートを採用
.ToArray();
dropdown.ClearOptions();
dropdown.AddOptions(resolutions.Select(r => $"{r.width} x {r.height}").ToList());
// 前回の選択を復元(保存がなければ現在の解像度に一番近いもの)
int saved = PlayerPrefs.GetInt(PrefKey, FindCurrentIndex());
dropdown.SetValueWithoutNotify(saved);
ApplyResolution(saved);
dropdown.onValueChanged.AddListener(OnResolutionSelected);
}
void OnResolutionSelected(int index)
{
ApplyResolution(index);
PlayerPrefs.SetInt(PrefKey, index); // 選んだ瞬間に保存
}
void ApplyResolution(int index)
{
Resolution r = resolutions[Mathf.Clamp(index, 0, resolutions.Length - 1)];
Screen.SetResolution(r.width, r.height, Screen.fullScreenMode);
}
int FindCurrentIndex()
{
for (int i = 0; i < resolutions.Length; i++)
{
if (resolutions[i].width == Screen.width && resolutions[i].height == Screen.height)
return i;
}
return resolutions.Length - 1; // 見つからなければ最大解像度
}
}
フルスクリーントグルはScreen.fullScreen = isOn;をToggleのonValueChangedにつなぎ、同様にPlayerPrefsへ保存すれば3点セットの完成です。
ポイントは2つです。 「選択肢は決め打ちせずScreen.resolutionsから作る」(ウルトラワイドでも4Kでも、そのモニターに合ったリストが自動でできます)と、 「復元時はSetValueWithoutNotifyを使う」(valueに直接代入するとonValueChangedが発火して、起動のたびに設定が二重適用されます)。保存まわりの詳しい作法は PlayerPrefs入門 をどうぞ。
ビルド時のデフォルト設定(Player Settings)
初回起動時のデフォルトは「Edit > Project Settings > Player」のResolution and Presentationで設定します。
- Fullscreen Mode: 起動時のデフォルト表示モード。
- Default Screen Width / Height: ウィンドウモード起動時のサイズ。
- Resizable Window: プレイヤーがウィンドウの端をドラッグしてサイズ変更できるか。
おまけ:先に知っておくと良いこと
- モバイルでは不要: iOS/Androidでは基本的に端末の画面をそのまま使うため、解像度選択UIは作りません。代わりに負荷調整として描画解像度を下げる手法があります(モバイル最適化のRender Scale)。
- UIのスケーリングは別問題: 解像度を変えたときにUIが崩れるのは、Canvas Scalerの設定の問題です。CanvasとRectTransformの記事 を参照してください。
- アスペクト比の違い: 16:9前提で作ると、ウルトラワイド(21:9)や16:10で見切れ・余白が発生します。カメラの視野とUIのアンカーを柔軟に組んでおくと安全です。
- エディタでは確認できない:
Screen.SetResolutionはエディタのGameビューでは効きません(Gameビューのサイズはエディタが管理しているため)。動作確認は ビルド して行います。
まとめ
- 解像度と表示モードの変更は
Screen.SetResolution(width, height, FullScreenMode)。反映はフレーム末尾。 - 表示モードのデフォルトはボーダーレス(FullScreenWindow) が現代の主流。
- オプション画面のリストは決め打ちではなく
Screen.resolutionsから作る。 - 選択はPlayerPrefsに保存し、復元はSetValueWithoutNotifyで二重適用を防ぐ。
- 初回起動時のデフォルトはPlayer Settings > Resolution and Presentationで。
「解像度ドロップダウン+フルスクリーントグル+保存」の3点セットができれば、PC向けオプション画面の土台は完成です。あなたのゲームは、ウルトラワイドモニターのプレイヤーにも快適ですか?