概要
PCゲームをリリースする際、プレイヤーが使用するモニターのサイズや性能は様々です。そのため、プレイヤーが自分の環境に合わせてゲームの画面解像度や表示モード(フルスクリーン/ウィンドウ)を自由に変更できる機能は、ユーザー体験を向上させる上で非常に重要です。
Unityでは、Screenクラスという便利なAPIを通じて、これらの設定をスクリプトから簡単に制御することができます。また、ゲーム起動時のデフォルト解像度や、プレイヤーに解像度選択ダイアログを表示するかどうかをビ ルド設定で指定することも可能です。
この記事では、Screenクラスを使った解像度とフルスクリーンモードの動的な変更方法、そしてPlayer Settingsでのビルド時の設定について解説します。
Screenクラスによる動的な設定変更
Screenクラスは、現在の画面に関する情報(幅、高さなど)を取得したり、設定を変更したりするための静的プロパティとメソッドを提供します。Screenクラスは静的クラスなので、インスタンスを作成する必要はなく、どこからでもScreen.propertyの形で直接アクセスできます。
現在の解像度を取得する
現在の画面の幅と高さをピクセル単位で取得するには、Screen.widthとScreen.heightプロパティを使用します。
using UnityEngine;
public class ScreenInfo : MonoBehaviour
{
void Start()
{
int screenWidth = Screen.width;
int screenHeight = Screen.height;
Debug.Log("現在の解像度: " + screenWidth + "x" + screenHeight);
}
}
解像度とフルスクリーンモードを設定する: SetResolution()
解像度と表示モードを一度に変更するには、Screen.SetResolution()メソッドを使用するのが最も簡単です。
Screen.SetResolution(int width, int height, bool fullscreen)
width: 設定したい画面の幅(ピクセル)。height: 設定したい画面の高さ(ピクセル)。fullscreen:trueにするとフルスクリーンモード、falseにするとウィンドウモードになります。
以下は、UIボタンがクリックされたときに解像度を変更する簡単な実装例です。
using UnityEngine;
public class ResolutionController : MonoBehaviour
{
// 1920x1080のフルスクリーンモードに設定するメソッド
public void SetFullScreen1080p()
{
Screen.SetResolution(1920, 1080, true);
Debug.Log("解像度を1920x1080 フルスクリーンに設定しました。");
}
// 1280x720のウィンドウモードに設定するメソッド
public void SetWindowed720p()
{
Screen.SetResolution(1280, 720, false);
Debug.Log("解像度を1280x720 ウィンドウモードに設定しました。");
}
}
このメソッドを、Canvas上に配置したButtonコンポーネントのOnClick()イベントから呼び出すように設定すれば、クリックで解像度を切り替える機能が実装できます。
フルスクリーンモードだけを切り替える
現在の解像度を維持したまま、フルスクリーンモードとウィンドウモードを切り替えたい場合は、Screen.fullScreenプロパティに直接値を代入します。
public void ToggleFullScreen()
{
// 現在のフルスクリーン状態を反転させる
Screen.fullScreen = !Screen.fullScreen;
if (Screen.fullScreen)
{
Debug.Log("フルスクリーンモードに切り替えました。");
}
else
{
Debug.Log("ウィンドウモードに切り替えました。");
}
}
FullScreenMode列挙型による高度な制御
Screen.SetResolutionの3番目の引数(bool fullscreen)は少し古い形式で、最近のUnityではより詳細な表示モードを指定できるFullScreenMode列挙型を使うのが一般的です。
Screen.SetResolution(int width, int height, FullScreenMode mode)
FullScreenModeには以下の種類があります。
FullScreenMode.ExclusiveFullScreen: 従来の排他的フルスクリーンモード。パフォーマンスは最も良いですが、Alt+Tabでの切り替えが遅い場合があります。FullScreenMode.FullScreenWindow: ボーダーレスフルスクリーンウィンドウモード。見た目はフルスクリーンですが、実態は画面全体に広がったウィンドウです。切り替えがスムーズで、最近のゲームで主流となっています。FullScreenMode.MaximizedWindow: (macOSのみ)最大化されたウィンドウ。FullScreenMode.Windowed: 通常のウィンドウモード。
public void SetBorderlessFullScreen()
{
// 現在のモニターの最大解像度を取得
Resolution currentRes = Screen.currentResolution;
// ボーダーレスフルスクリーンに設定
Screen.SetResolution(currentRes.width, currentRes.height, FullScreenMode.FullScreenWindow);
}
ビルド時のデフォルト設定 (Player Settings)
ゲーム起動時のデフォルトの解像度や挙動は、Edit > Project Settings > PlayerのResolution and Presentationセクションで設定します。
- Fullscreen Mode: 起動時のデフォルトのフルスクリーンモードを選 択します (
Exclusive,Borderlessなど)。 - Default Screen Width / Height: ウィンドウモードで起動した際のデフォルトの幅と高さを設定します。
- Display Resolution Dialog: (古い機能)
Enabledにすると、ゲーム起動時にUnity標準の解像度選択ダイアログが表示されます。最近のゲームでは、ゲーム内のオプション画面で設定するのが一般的なため、通常はDisabledにしておきます。
まとめ
プレイヤーに合わせた解像度設定機能は、特にPC向けゲームにおいては必須の機能です。
Screenクラスを使って、画面の情報を取得したり、設定を変更したりできる。Screen.SetResolution(width, height, mode)で、解像度と表示モードを動的に変更する。FullScreenMode列挙型を使うことで、ボーダーレスフルスクリーンなどの詳細なモード指定が可能。- Player Settingsで、ゲーム起動時のデフォルト設定を行える。
ゲームのオプション画面に、一般的な解像度のリスト(1280x720, 1920x1080, 2560x1440など)や、フルスクリーン/ウィンドウの切り替えトグルを用意し、Screen.SetResolutionを呼び出す機能を実装することで、より多くのプレイヤーにとって快適なプレイ環境を提供できるようになります。