Unity切换分辨率
在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;
}