金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  418 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
Canvas Scaler 的3种模式

(金庆的专栏 2021.3)

参考:
https://wenku.baidu.com/view/83991090336c1eb91b375db8.html

Unity Canvas 有个 Canvas Scaler 组件,用来决定 Canvas 的 Scale(缩放)值。
Scale 有 X,Y,Z 3个分量,都是同一值,即在各个方向上都是同倍率缩放的。
它有3种Scale Mode。

因为设计时的宽高比与目标机型宽高比不同,Canvas 需要先增减为目标高宽比,然后再缩放。
Canvas 缩放并不影响UI元素的相互位置,只是同比缩放。
但是高宽比调整时会造成UI元素的相对位置变化,如宽度增大后,UI元素会在宽度方向上相互散开。

可以在 Unity Editor Game 页左上角分辨率下拉菜单中创建几个低分辨率屏,用来测试屏幕大小切换。
测试界面可放置2个按钮,一个锚定到左上,位于左上,一个锚定到右下,位于右下,不要strech。

3种模式如下。

## Constance Pixel Size

Constance Pixel Size 模式下,Scale 总是为1。
目标机上的 Canvas 就是其分辨率大小。
因为设计时分辨率与实际分辨率不同,显示会不同。
但是图片和按钮的大小保持固定像素大小。
如果屏幕变大,UI元素就会相互散开,变小则聚拢。
如果需要缩放,只能通过程序调节。

## Scale With Screen Size

随屏幕大小缩放。
该模式下有个 Reference Resolution (参考分辨率),应该设为主流机型的分辨率。
在主流机型下,Scale 为1,与设计显示相同。

https://blog.csdn.net/u011948420/article/details/112641308
2020中国移动游戏质量白皮书-WeTest 报告 Android 手机 TOP300 分辨率为 2340*1080 占 31%。

如果目标机型为 4680*2160,则 Scale 正好为2;如果目标机型为 1179*540,则Scale为0.5.

一般情况下宽高比不同,此时Scale算法有3种,即3种Sceen Match Mode:

### Match Width Or Height

匹配宽度或高度。

此时有个 Match 划动条,可以在 Width(0)..Height(1)之间。
如果为0,匹配宽度,则 Scale 为目标屏宽与参考屏宽之比;
如果为1,匹配高度,则 Scale 为目标屏高与参考屏高之比;
如果为0.5, 加权匹配,则是这2个比值的平均值。

匹配宽度时,高度方向上会有UI扩散或聚拢。
匹配高度时,宽度方向上会有UI扩散或聚拢。
加权匹配时,UI在高上扩散宽上聚拢,或者在高上聚拢宽上扩散。

### Expand

增加。先增加宽或高到目标宽高比。该增加方向UI元素会散开。

### Shrink

减少。先减少宽或高到目标宽高比。该减少方向UI元素会聚拢。

## Constant Physical Size

固定物理大小。
随着4k屏的出现,屏幕DPI会很大,许多设备的像素点非常小。
同样的按钮,在高DPI下,如果固定像素大小,则会非常小,这时适合用该模式。

posted on 2021-03-02 12:00 金庆 阅读(165) 评论(0)  编辑 收藏 引用 所属分类: 2. 网游开发

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理