You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C# 如何通过代码根据屏幕尺寸调整分辨率纵横比

Unity 根据屏幕尺寸调整游戏纵横比实现方案

问题原因

你之前调用的Screen.SetResolution仅会调整游戏运行窗口的物理分辨率,不会自动校正渲染内容的纵横比,画面拉伸是因为相机默认会将渲染画面铺满整个窗口,不会根据屏幕比例做自适应调整。

实现方案

通过修改主相机的ViewportRect属性控制渲染区域的比例,即可实现纵横比适配,还可以根据需求选择是保持游戏开发基准比例(加黑边避免内容裁剪)还是完全适配当前屏幕比例。

完整代码

public class ResolutionFixer : MonoBehaviour
{
    // 如果你需要固定游戏的目标纵横比(比如开发时用的16:9),可以在这里赋值,不需要固定就删去这个变量
    public float fixedTargetAspect = 16f / 9f;
    // 开启后会完全适配当前屏幕的原生纵横比,不保留固定比例
    public bool adaptToScreenAspect = true;

    void Start()
    {
        float targetAspect;
        if (adaptToScreenAspect)
        {
            // 取当前屏幕的实际纵横比作为目标比例
            targetAspect = (float)Screen.width / Screen.height;
        }
        else
        {
            // 用预设的固定比例
            targetAspect = fixedTargetAspect;
        }

        float screenAspect = (float)Screen.width / Screen.height;
        float scaleFactor = screenAspect / targetAspect;
        Camera mainCam = GetComponent<Camera>();
        Rect viewportRect = mainCam.rect;

        if (scaleFactor < 1f)
        {
            // 屏幕比例比目标比例窄,上下留黑边
            viewportRect.width = 1f;
            viewportRect.height = scaleFactor;
            viewportRect.x = 0f;
            viewportRect.y = (1f - scaleFactor) / 2f;
        }
        else
        {
            // 屏幕比例比目标比例宽,左右留黑边
            float widthScale = 1f / scaleFactor;
            viewportRect.height = 1f;
            viewportRect.width = widthScale;
            viewportRect.y = 0f;
            viewportRect.x = (1f - widthScale) / 2f;
        }

        mainCam.rect = viewportRect;

        // 全屏模式下可以加上这行确认分辨率适配,窗口模式不需要开启
        // Screen.SetResolution(Screen.width, Screen.height, FullScreenMode.FullScreenWindow);
    }
}

使用说明

  • 将脚本挂载到游戏的主相机上
  • 不需要固定比例就保持adaptToScreenAspect为true即可自动适配当前屏幕尺寸
  • 如果需要固定开发时的基准比例避免内容裁剪,关闭adaptToScreenAspect,设置fixedTargetAspect为你开发时用的比例即可

UGUI适配补充

如果项目用到UGUI界面,还需要调整根画布的配置:

  • 找到场景里的根Canvas对象,找到Canvas Scaler组件
  • 将UI Scale Mode设置为Scale With Screen Size
  • 根据你的设计稿调整Match属性:设为0优先匹配宽度,设为1优先匹配高度,设为0.5宽高各匹配一半

内容的提问来源于stack exchange,提问作者Itay Tsuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:54:04