UhiyamaLAB個人開発者の創作備忘録

【Unity】ゲームの画面サイズを1080pと720pで切り替えられるようにする Screen.SetResolution

2024/01/182024/12/08ゲーム開発Unity

Unityでは、Screen.SetResolution関数を利用することでゲームウィンドウの解像度を実行時に変更できます。本記事では、具体的なコード例と解像度変更ボタンの実装例を紹介します。また、SetResolutionを使用する際の注意点や、解像度以外の関連要素(フルスクリーン設定や解像度変更が反映されない場合の対処法)についても解説します。


  1. はじめに
  2. サンプル実装
    1. コード例
    2. ボタンへのアタッチ方法
  3. Screen.SetResolutionの詳細
    1. パラメータ解説
    2. ウィンドウモードとフルスクリーンモード
    3. 解像度が反映されない場合の対処法
  4. 実利的なTIPS
    1. ターゲットプラットフォーム別の注意点
    2. アスペクト比・UIスケーリングへの配慮
    3. 解像度変更メニューをより便利に
  5. 参考資料

はじめに

Unityでゲームを開発していると、プレイヤーに解像度を変更する機能を提供したくなることがあります。フルHD (1920×1080) で遊びたい人もいれば、軽量な1280×720を望む人もいるでしょう。そんなときに便利なのがScreen.SetResolutionです。このメソッドを使えば、実行中のゲーム画面の解像度を動的に変更できます。

サンプル実装(1920×1080と1280×720ボタン)

ここでは、解像度を切り替えるための2つのボタン(1920×1080と1280×720)を用意して、そのボタンが押されたときに実行するスクリプト例を紹介します。

コード例

using UnityEngine;

public class ResolutionChangeButton : MonoBehaviour
{
    public void SetResolution(int width, int height)
    {
        // 第3引数にはフルスクリーンかどうかを指定できます。
        // 現在のフルスクリーン状態を維持したい場合はScreen.fullScreenを渡します。
        Screen.SetResolution(width, height, Screen.fullScreen);
    }

    public void SetResolution1080p()
    {
        SetResolution(1920, 1080);
    }

    public void SetResolution720p()
    {
        SetResolution(1280, 720);
    }
}

ボタンへのアタッチ方法

  1. Unityエディタ上でUIのボタン(GameObject)を作成します。
  2. インスペクタで「OnClick()」イベントに上記スクリプトをアタッチしたオブジェクトをドラッグ&ドロップします。
  3. 「1920×1080」ボタンにはSetResolution1080p()を、「1280×720」ボタンにはSetResolution720p()を指定すればOKです。

Screen.SetResolutionの詳細

パラメータ解説

Screen.SetResolution(width, height, fullscreen)

  • width, height:設定したい解像度(ピクセル)
  • fullscreentrueでフルスクリーン、falseでウィンドウ表示

例:Screen.SetResolution(1920, 1080, true)は1920×1080のフルスクリーン表示に切り替えます。

ウィンドウモードとフルスクリーンモード

Screen.fullScreenフラグを利用することで、現在のフルスクリーン状態を引き継ぎつつ解像度を変更できます。
– 現在がウィンドウモードならウィンドウサイズのみ変更
– 現在がフルスクリーンモードならフルスクリーン解像度のみ変更

また、解像度変更時に同時にフルスクリーン状態を制御したい場合は、Screen.SetResolution(width, height, fullscreenFlag)で直接指定可能です。

解像度が反映されない場合の対処法

  • エディタ上での挙動:Unityエディタ内ではSetResolutionが制限されることがあります。ビルド後の実行ファイルで動作を確認しましょう。
  • プラットフォーム依存:WebGLやモバイルでは、期待通りに解像度変更が反映されない場合があります。
  • 競合:他のプラグインやスクリプトが画面サイズを同時に制御している場合は、それらを確認してください。

実利的なTIPS

ターゲットプラットフォーム別の注意点

  • PC向け(Windows/Mac/Linux)SetResolutionは基本的に問題なく動作しますが、OSのディスプレイスケーリングに影響される場合もあります。
  • WebGL:ブラウザ上ではHTML/CSS側のスケーリングが優先されるため、SetResolutionが期待通りに機能しないことがあります。
  • モバイル(Android/iOS):ネイティブ解像度が固定的なため、SetResolutionで任意の解像度変更は難しい場合があります。

アスペクト比・UIスケーリングへの配慮

解像度変更時にはUIレイアウトやアスペクト比が変わるため、Canvas Scalerコンポーネントの活用や、アンカー・相対サイズを用いたUI配置で柔軟に対応しましょう。

解像度変更メニューをより便利に

  • 任意の解像度を入力して変更できるテキストフィールドを用意
  • サポート可能な解像度一覧を取得し、ドロップダウンで選択させる
  • フルスクリーン/ウィンドウモード切替ボタンを追加

これらで、ユーザーにとって使いやすい設定メニューを実現できます。

参考資料


まとめ

今回は、Unityでゲーム画面解像度を動的に変更する方法を紹介しました。Screen.SetResolutionを用いることで、プレイヤーに最適な解像度選択の余地を与え、より快適なゲームプレイ環境を提供できます。プラットフォーム別の挙動やUI面での調整、フルスクリーン設定なども踏まえ、ぜひ自分のプロジェクトに導入してみてください。

この記事をシェアする