在Windows下,切换分辨率,全屏

using UnityEngine;

public class DisplayModeManager : MonoBehaviour
{
    // 预设的窗口分辨率选项
    [Tooltip("预设的窗口模式分辨率")]
    public Resolution[] windowResolutions = new Resolution[]
    {
        new Resolution { width = 1280, height = 720, refreshRate = 60 },
        new Resolution { width = 1920, height = 1080, refreshRate = 60 },
        new Resolution { width = 2560, height = 1440, refreshRate = 60 }
    };
    
    // 当前窗口分辨率索引
    private int currentWindowResIndex = 1; // 默认1080p
    private bool isFullscreen;

    private void Start()
    {
        // 记录初始状态
        isFullscreen = Screen.fullScreen;
    }

    private void Update()
    {
        // F11键切换全屏/窗口模式
        if (Input.GetKeyDown(KeyCode.F11))
        {
            ToggleFullscreen();
        }
        
        // 左方括号键切换到更低分辨率
        if (Input.GetKeyDown(KeyCode.LeftBracket) && !isFullscreen)
        {
            ChangeResolution(-1);
        }
        
        // 右方括号键切换到更高分辨率
        if (Input.GetKeyDown(KeyCode.RightBracket) && !isFullscreen)
        {
            ChangeResolution(1);
        }
    }

    /// <summary>
    /// 切换全屏/窗口模式
    /// </summary>
    public void ToggleFullscreen()
    {
        isFullscreen = !isFullscreen;
        
        if (isFullscreen)
        {
            // 切换到全屏模式(使用当前显示器最佳分辨率)
            Resolution bestRes = Screen.resolutions[Screen.resolutions.Length - 1];
            Screen.SetResolution(bestRes.width, bestRes.height, FullScreenMode.FullScreenWindow);
            Debug.Log($"已切换到全屏模式: {bestRes.width}x{bestRes.height} @ {bestRes.refreshRate}Hz");
        }
        else
        {
            // 切换到窗口模式(使用当前选中的分辨率)
            Resolution targetRes = windowResolutions[currentWindowResIndex];
            Screen.SetResolution(targetRes.width, targetRes.height, FullScreenMode.Windowed);
            Debug.Log($"已切换到窗口模式: {targetRes.width}x{targetRes.height}");
        }
    }

    /// <summary>
    /// 更改窗口模式下的分辨率
    /// </summary>
    /// <param name="direction">方向:-1降低分辨率,1提高分辨率</param>
    public void ChangeResolution(int direction)
    {
        currentWindowResIndex = Mathf.Clamp(currentWindowResIndex + direction, 0, windowResolutions.Length - 1);
        Resolution newRes = windowResolutions[currentWindowResIndex];
        Screen.SetResolution(newRes.width, newRes.height, FullScreenMode.Windowed);
        Debug.Log($"已更改分辨率: {newRes.width}x{newRes.height}");
    }

    // 以下方法可绑定到UI按钮
    public void SetFullscreen()
    {
        if (!isFullscreen) ToggleFullscreen();
    }

    public void SetWindowed()
    {
        if (isFullscreen) ToggleFullscreen();
    }

    public void SetResolution(int index)
    {
        if (index >= 0 && index < windowResolutions.Length)
        {
            currentWindowResIndex = index;
            SetWindowed();
        }
    }
}

// 为了在Inspector中显示自定义分辨率
[System.Serializable]
public struct Resolution
{
    public int width;
    public int height;
    public int refreshRate;
}