You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity 2019 Windows独立版构建最低分辨率设置的优化方案咨询

更优雅的Unity Windows独立版最低分辨率设置方案

嘿,我懂你不想在Update里每帧都跑分辨率检查的烦恼——完全是性能浪费,代码也不够整洁。针对你用的Unity 2019.1.2f1 Windows独立版,这里有几个更简洁优雅的实现方式:

一、无代码编辑器配置方案(优先推荐)

这是最省心的方式,直接靠Unity的Player Settings就能搞定,完全不用写代码:

  • 打开Edit > Project Settings > Player
  • 切换到Standalone平台(确保是Windows目标)
  • 找到Resolution and Presentation板块下的Windowed Resolution设置
  • 勾选Resizable Window(如果允许用户调整窗口大小),然后把Minimum Width设为800,Minimum Height设为450
  • 同时可以把Default Screen WidthDefault Screen Height也设为800x450,保证游戏启动时就用这个分辨率

Unity会自动限制窗口不能被拖拽到低于你设置的最小尺寸,完美替代原来的Update循环逻辑。

二、事件驱动的代码方案(适合自定义逻辑)

如果需要更灵活的控制(比如某些场景下放宽限制),可以用Unity的Screen.resolutionChanged事件,只在分辨率实际变化时触发检查,避免每帧执行:

using UnityEngine;

public class ResolutionLimiter : MonoBehaviour
{
    // 把最小分辨率设为常量,方便后续修改
    private const int MinResolutionWidth = 800;
    private const int MinResolutionHeight = 450;

    private void Awake()
    {
#if !UNITY_EDITOR
        // 游戏启动时先检查一次,确保初始分辨率符合要求
        EnforceMinimumResolution();
        // 注册分辨率变化的监听事件
        Screen.resolutionChanged += OnResolutionChanged;
#endif
    }

    private void OnDestroy()
    {
#if !UNITY_EDITOR
        // 销毁时移除监听,防止内存泄漏
        Screen.resolutionChanged -= OnResolutionChanged;
#endif
    }

    private void OnResolutionChanged(int newWidth, int newHeight)
    {
        // 分辨率变化时才执行检查
        EnforceMinimumResolution();
    }

    private void EnforceMinimumResolution()
    {
        if (Screen.width < MinResolutionWidth || Screen.height < MinResolutionHeight)
        {
            // 保持当前的全屏状态,只修改分辨率
            Screen.SetResolution(MinResolutionWidth, MinResolutionHeight, Screen.fullScreen);
        }
    }
}

为什么这个方案更好?

  • 性能更优:只有在分辨率实际改变时才执行检查,不像Update那样每帧都跑
  • 代码更清晰:逻辑拆分到独立方法,常量抽离便于维护
  • 避免内存泄漏:销毁时移除事件监听,符合Unity的最佳实践

内容的提问来源于stack exchange,提问作者Harsh Priyadarshi

火山引擎 最新活动