目录

Unity屏幕适配立项时设置

Unity屏幕适配——立项时设置

项目类型:2D游戏、竖屏、URP 其他类型,部分原理类似。

1、确定设计分辨率:750*1334

为什么是它? 因为它是 iphone8 的尺寸,宽高比适中。 方便后续适配到真机的 “更长屏” 或 “更宽屏”

2、在场景中添加 UICamera、MainCamera、UICanvas

添加物体及相关组件 https://i-blog.csdnimg.cn/direct/c9076dcd041047cd936383ca7badd18e.png

3、调整 UICamera 物体的 Camera 组件(URP下)

Render Type: Overlay (支持多相机显示,要点) Projection: Orthographic (正交) Size: 6.67 (修改将影响 UICanvas 的 Scale 值)(注意,它不影响 Canvas 在 Game 视图中的占比,因为 Canvas 总是填满屏幕) ClearDepth:true (多相机显示正确,要点) Culling Mask:UI (使只渲染UI) https://i-blog.csdnimg.cn/direct/dce9cc46530847919fcd2aacae52ef05.png

4、调整 MainCamera 物体的 Camera 组件(URP下)

Render Type: Base Projection: Orthographic (正交)(2D游戏) Size: 6.67 (修改将影响 场景物体在 Game 视图中的占比) Culling Mask:去掉UI (使不渲染UI) Stack 中,添加 UICamera (相机关联,支持多相机显示,要点) https://i-blog.csdnimg.cn/direct/957789ace7ef40ddb1aa89690d3a988a.png

5、调整 UICanvas 物体的 Canvas 组件

RenderMode: Screen Space-Camera RenderCamera: 拖入 UICamera SortingLayer: UI https://i-blog.csdnimg.cn/direct/1ea0847290184c32bbea8c04638b2874.png

6、设置 UICanvas 物体的 Canvas Scaleer 组件

UI Scale Mode: Scale With Screen Size (随屏幕缩放) Reference Resolution: 750*1334 (设计分辨率) Screen Match Mode: Expand (总是扩展更大边)(移动游戏通常采用无黑边的适配方式) Reference pixels Per Unit: 100 (控制精灵像素密度,具体见下方说明) https://i-blog.csdnimg.cn/direct/8e6dd6f4b0ad403f81df1a6c69111014.png

注意:为什么是 6.67 ?

6.67 = 1334/2/100(若为横屏游戏则为3.75) 其中: 1334 : 设计分辨率的高(若为横屏游戏则为750) 2 : OrthographicSize 为垂直视体大小的一半(Size属性用于定义相机视图的垂直大小)。 [Camera-orthographicSize - Unity 脚本 API]( orthographicSize.html “Camera-orthographicSize - Unity 脚本 API”) https://i-blog.csdnimg.cn/direct/f00e7c614e54431ea88e7bae6e0e6a53.png 100: UI坐标系 相对 场景世界坐标系的缩放倍数,即,在 Game 视图 中 UI 中100像素 = 场景中世界坐标系的 1米 这个值来自 Canvas Scaler 的 Reference pixels Per Unit [Canvas-referencePixelsPerUnit - Unity 脚本 API]( referencePixelsPerUnit.html “Canvas-referencePixelsPerUnit - Unity 脚本 API”) https://i-blog.csdnimg.cn/direct/792fb036e8f04148b61db6b2d869a2d9.png 为什么它决定了 UI坐标系 相对 场景世界坐标系 的缩放倍数? 因为: Image(UI坐标系中的物体) SetNative 后的大小(单位:像素数) = 原图像素数 / (Sprite 导入设置的 Pixels Per Unit / CanvasScaler设置的 Reference Pixels Per Unit) SpriteRenderer(场景世界坐标系中的物体) 的大小(单位:米) = 原图像素数 / Sprite 导入设置的 Pixels Per Unit 可以看到,两者差的倍数正是 Canvas Scaler 的 Reference pixels Per Unit 当两者同时使用一张图时,在 Game 视图 中其大小是相同的 https://i-blog.csdnimg.cn/direct/c8dcb63f38f54d108ec0ffdafd349df6.png

对齐之美

1、将 MainCamera 的 Size 设为 6.67,将使世界物体 7.5m*13.34米的物体 刚好填充整个 MainCamera 的视口,即刚好填充 Game 视图 的整个屏幕 https://i-blog.csdnimg.cn/direct/1c93879cb8a241b382597849642ce0da.png 2、将 UICamera 的 Size 设为 6.67,将使 UICanvas 的 Scale 值为 0.01,在 Scene 视图 中观察,UICamera 和 MainCamera 的视口大小是重合的,UI与场景物体大小也是对齐的,完美! https://i-blog.csdnimg.cn/direct/7f8ae1156abc47a89f36af4ae63fd2da.png