Unityでは、Screen.SetResolution
関数を利用することでゲームウィンドウの解像度を実行時に変更できます。本記事では、具体的なコード例と解像度変更ボタンの実装例を紹介します。また、SetResolution
を使用する際の注意点や、解像度以外の関連要素(フルスクリーン設定や解像度変更が反映されない場合の対処法)についても解説します。
はじめに
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);
}
}
ボタンへのアタッチ方法
- Unityエディタ上でUIのボタン(GameObject)を作成します。
- インスペクタで「OnClick()」イベントに上記スクリプトをアタッチしたオブジェクトをドラッグ&ドロップします。
- 「1920×1080」ボタンには
SetResolution1080p()
を、「1280×720」ボタンにはSetResolution720p()
を指定すればOKです。
Screen.SetResolutionの詳細
パラメータ解説
Screen.SetResolution(width, height, fullscreen)
- width, height:設定したい解像度(ピクセル)
- fullscreen:
true
でフルスクリーン、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面での調整、フルスクリーン設定なども踏まえ、ぜひ自分のプロジェクトに導入してみてください。