[Unity][コスプレZ]FullScreen⇔Windowの切り替え

2022/05/24に公開

はじめに

コスプレZはPC版のみフルスクリーンモードとウィンドウモードを切り替えられるような実装を行ったので今回はその話です。

持ち帰れるもの

  • ウィンドウとフルスクリーンの切り替え方法

コスプレZについて

全画面とウィンドウを切り替え可能なシューティングゲームだ!
https://store.steampowered.com/app/1779630/Cosmo_Player_Z/

やり方

以下のソースコードをプロジェクトに入れてSetUpDefaultResolution->Applyの順番で実行してください。
詳細はコメントにて。

using UnityEngine;

/// <summary>
/// グラフィック設定
/// </summary>
public static class GraphicSettings
{
    //フルスクリーンの基準解像度
    private const int SCREEN_WIDTH = 1920;
    private const int SCREEN_HIGHT = 1080;
    
    //アスペクト比を考慮したフルスクリーン解像度
    private static Vector2Int _defaultResolution;
    
    //ウィンドウ時の基準解像度
    private static Vector2Int _windowResolution = new Vector2Int(1280, 720);

    /// <summary>
    /// 解像度の初期値を設定
    /// </summary>
    public static void SetUpDefaultResolution()
    {
        //解像度取得
        var screenWidth = Display.main.systemWidth;
        var screenHeight = Display.main.systemHeight;
	
        //ディスプレイの解像度を16:9に変換
        var originAspect = (float)SCREEN_WIDTH / SCREEN_HIGHT;
        var screenAspect = screenHeight == 0 ? 1f : (float)screenWidth / screenHeight;
        var height = GameDefine.SCREEN_RESOLUTION_HEIGHT;
        var width = (int)(GameDefine.SCREEN_RESOLUTION_WIDTH * (screenAspect / originAspect));
	
	//フルスクリーン時の解像度を取得
        _defaultResolution = new Vector2Int(width, height);
    }

    /// <summary>
    /// 解像度を決定
    /// </summary>
    public static void Apply(bool fullScreen)
    {
        if (fullScreen)
        {
            Screen.SetResolution(_defaultResolution.x, _defaultResolution.y, true);
        }
        else
        {
            Screen.SetResolution(_windowResolution.x, _windowResolution.y, false);
        }
    }
}

Discussion