Unity屏幕适配——立项时设置
项目类型2D游戏、竖屏、URP其他类型部分原理类似。1、确定设计分辨率750*1334目前常见两种设计分辨率为750x1334iPhone 6/7/8的物理分辨率属于苹果设备中的经典尺寸。720x1280是HD的分辨率常见于安卓设备尤其是中低端机型。若以​iOS 优先​优先考虑 ​750x1334可直接适配 iPhone 6/7/8并作为 iOS 设计的基准逻辑分辨率 375x6672x 输出。若以Android 优先​优先考虑 ​720x1280但需注意主流安卓设备已普遍转向更高分辨率如 1080x1920 或 1440x2560。跨平台iOS Android​优先考虑 750x1334。两者宽高比都接近 9:16较为适中。方便后续适配到真机的 “更长屏” 或 “更宽屏”。2、在场景中添加 UICamera、MainCamera、UICanvas添加物体及相关组件3、调整 UICamera 物体的 Camera 组件URP下Render Type: Overlay (支持多相机显示要点)Projection: Orthographic 正交Size: 6.67修改将影响 UICanvas 的 Scale 值注意它不影响 Canvas 在 Game 视图中的占比因为 Canvas 总是填满屏幕ClearDepthtrue (多相机显示正确要点)Culling MaskUI 使只渲染UI4、调整 MainCamera 物体的 Camera 组件URP下Render Type: BaseProjection: Orthographic 正交2D游戏Size: 6.67修改将影响 场景物体在 Game 视图中的占比Culling Mask去掉UI 使不渲染UIStack 中添加 UICamera 相机关联支持多相机显示要点5、调整 UICanvas 物体的 Canvas 组件RenderMode Screen Space-CameraRenderCamera 拖入 UICameraSortingLayer UI6、设置 UICanvas 物体的 Canvas Scaleer 组件UI Scale Mode: Scale With Screen Size 随屏幕缩放Reference Resolution: 750*1334 设计分辨率Screen Match Mode: Expand 总是扩展更大边移动游戏通常采用无裁剪的适配方式具体选择原因见下方测试Reference pixels Per Unit: 100 控制精灵像素密度具体见下方说明--------------------------- NRatel 割 ---------------------------注意Camera 的 Size 为什么是 6.67 6.67 1334/2/100若为横屏游戏则为3.75其中1334 设计分辨率的高若为横屏游戏则为7502 OrthographicSize 为垂直视体大小的一半Size属性用于定义相机视图的垂直大小。Camera-orthographicSize - Unity 脚本 API100UI坐标系 相对 场景世界坐标系的缩放倍数即在Game 视图中 UI 中100像素 场景中世界坐标系的 1米这个值来自 Canvas Scaler 的 Reference pixels Per UnitCanvas-referencePixelsPerUnit - Unity 脚本 API为什么它决定了 UI坐标系 相对 场景世界坐标系 的缩放倍数因为ImageUI坐标系中的物体 SetNative 后的大小单位像素数 原图像素数 / (Sprite 导入设置的 Pixels Per Unit / CanvasScaler设置的 Reference Pixels Per Unit)SpriteRenderer场景世界坐标系中的物体 的大小单位米 原图像素数 / Sprite 导入设置的 Pixels Per Unit可以看到两者差的倍数正是Canvas Scaler 的 Reference pixels Per Unit当两者同时使用一张图时在Game 视图中其大小是相同的对齐之美2D游戏1、将 MainCamera 的 Size 设为 6.67将使世界物体 7.5m*13.34米的物体 刚好填充整个 MainCamera 的视口即刚好填充Game 视图的整个屏幕2、将 UICamera 的 Size 设为 6.67将使 UICanvas 的 Scale 值为 0.01在Scene 视图中观察UICamera 和 MainCamera 的视口大小是重合的UI与场景物体大小也是对齐的完美--------------------------- NRatel 割 ---------------------------注意Canvas Scaleer 为什么选 Expand?竖屏游戏各选择的结果对比以下将 Match Width Or Height 简单称之为“Match”以下将 ipad 等宽屏机器 简单成为 “宽机型”以下将 iphone12 等宽屏机器 简单成为 “长机型”“宽机型/长机型” 均相对于 参考/设计分辨率 的宽高比判断。以下结果中“留空白” 指Canvas 出现额外空间。“被裁剪”指Canvas 某一方向小于参考分辨率放在参考设计区边缘的内容将超出屏幕无法显示。1_1、Match 0宽机型 上下被裁剪1_2、Match 0长机型 上下留空白2_1、Match 1宽机型 左右留空白2_2、Match 1长机型 左右被裁剪3_1、Match 0.5宽机型 上下被裁剪小幅 左右留空白小幅3_2、Match 0.5长机型 左右被裁剪小幅 上下留空白小幅4_1、Expand宽机型 左右留空白4_2、Expand长机型 上下留空白5_1、Shrink宽机型 上下被裁剪5_2、Shrink长机型 左右被裁剪集中总结1_1、Match 0宽机型 上下被裁剪1_2、Match 0长机型 上下留空白2_1、Match 1宽机型 左右留空白2_2、Match 1长机型 左右被裁剪3_1、Match 0.5宽机型 上下被裁剪小幅 左右留空白小幅3_2、Match 0.5长机型 左右被裁剪小幅 上下留空白小幅4_1、Expand宽机型 左右留空白4_2、Expand长机型 上下留空白5_1、Shrink宽机型 上下被裁剪5_2、Shrink长机型 左右被裁剪-------------------------------------------------------------综上若想在任何情况下都不发生裁剪裁剪不安全只能采取 Expand,或 使用 Match 但根据 屏幕类型在 宽机型时修改使 Match 1在长机型时修改使 Match 0而这其实就是 Expand。