Unity中如何调整相机适配多分辨率 兼容各类横屏屏幕比例
Unity世界空间项目全分辨率拉伸适配方案(无裁切无留边)
你的需求不需要做等比适配、不需要黑边留白、允许拉伸变形,实现逻辑非常直接:固定相机的逻辑视口范围和1920*1080设计时完全一致,强制将该视口内容拉伸铺满所有比例的屏幕,所有场景物体、世界空间UI会随投影自然拉伸,不会出现裁切、不会露出空白背景。
实现步骤
- 第一步:校准基准相机参数
- 将编辑器Game视图分辨率固定为
1920*1080 横屏 - 选择场景主相机(确认是正交模式,绝大多数2D/俯视角趣味项目都用正交相机),调整
Orthographic Size(正交大小)值,直到你布置好的所有场景元素、世界空间UI刚好完整填满Game视图,记录下这个Size值后续使用。
例:如果你按1世界单位对应100像素的规则搭建场景,1080高度对应的半高是540像素,正交Size设为5.4即可,以你实际场景的单位规则为准。
- 将编辑器Game视图分辨率固定为
- 第二步:挂载适配脚本
给主相机挂载下面的脚本,把你刚才记录的基准正交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
相关产品推荐
相关产品推荐

