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

Unity中如何调整相机适配多分辨率 兼容各类横屏屏幕比例

Unity世界空间项目全分辨率拉伸适配方案(无裁切无留边)

你的需求不需要做等比适配、不需要黑边留白、允许拉伸变形,实现逻辑非常直接:固定相机的逻辑视口范围和1920*1080设计时完全一致,强制将该视口内容拉伸铺满所有比例的屏幕,所有场景物体、世界空间UI会随投影自然拉伸,不会出现裁切、不会露出空白背景。

实现步骤

  • 第一步:校准基准相机参数
    1. 将编辑器Game视图分辨率固定为1920*1080 横屏
    2. 选择场景主相机(确认是正交模式,绝大多数2D/俯视角趣味项目都用正交相机),调整Orthographic Size(正交大小)值,直到你布置好的所有场景元素、世界空间UI刚好完整填满Game视图,记录下这个Size值后续使用。

    例:如果你按1世界单位对应100像素的规则搭建场景,1080高度对应的半高是540像素,正交Size设为5.4即可,以你实际场景的单位规则为准。

  • 第二步:挂载适配脚本
    给主相机挂载下面的脚本,把你刚才记录的基准正交Size填到脚本对应参数里即可,脚本会自动在启动、屏幕旋转、分屏分辨率变化时完成适配:
using UnityEngine;

[ExecuteAlways]
public class FullScreenStretchCamera : MonoBehaviour
{
    [Header("填1920*1080基准下校准好的正交Size值")]
    public float referenceOrthoSize = 5.4f;
    // 设计分辨率宽高比 1920/1080
    private const float DesignAspect = 1920f / 1080f;
    private Camera _targetCam;
    private int _lastScreenWidth, _lastScreenHeight;

    private void Awake()
    {
        _targetCam = GetComponent<Camera>();
        UpdateCameraFit();
    }

    private void Update()
    {
        // 检测分辨率变化自动重适配(适配编辑器调分辨率、移动端旋转、分屏场景)
        if (_lastScreenWidth != Screen.width || _lastScreenHeight != Screen.height)
        {
            UpdateCameraFit();
        }
    }

    private void UpdateCameraFit()
    {
        _lastScreenWidth = Screen.width;
        _lastScreenHeight = Screen.height;
        if (_lastScreenHeight == 0) return;

        // 固定正交大小为基准值,不随分辨率变化
        _targetCam.orthographicSize = referenceOrthoSize;
        // 核心:固定逻辑视口范围和设计时完全一致,所有设计内容永远在视口内不会被裁切
        float halfHeight = referenceOrthoSize;
        float halfWidth = referenceOrthoSize * DesignAspect;
        // 生成固定范围的正交投影矩阵,内容会自动拉伸铺满全屏
        Matrix4x4 stretchProj = Matrix4x4.Ortho(
            -halfWidth, halfWidth,
            -halfHeight, halfHeight,
            _targetCam.nearClipPlane,
            _targetCam.farClipPlane
        );
        _targetCam.projectionMatrix = stretchProj;
    }

    private void OnDisable()
    {
        // 脚本禁用时重置矩阵,避免退出模式/切后台时渲染异常
        _targetCam.ResetProjectionMatrix();
    }
}

注意事项

  • 不需要给世界空间Canvas添加任何屏幕适配组件(比如CanvasScaler的屏幕匹配模式),世界空间UI和场景物体走相同的相机投影逻辑,会自动同步拉伸适配,额外加适配组件反而会导致错位。
  • 只要你在1920*1080基准下把场景背景、元素铺满整个设计视口,适配后永远不会露出相机背景色(你说的蓝边),也不会有任何元素被裁切。
  • 不同比例屏幕下的拉伸效果完全符合预期:超宽屏上内容会横向拉宽(物体变胖),窄屏/正方形屏上内容会横向压缩(物体变瘦),全程铺满屏幕无空白。
  • 如果你用的是透视相机,逻辑完全一致:只需要把脚本里的正交投影矩阵替换成固定垂直/水平FOV的透视投影矩阵即可,趣味横屏项目用正交相机足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:15:39