Unity UGUI-Canvas Scaler总结

参考学习&引用出处:

http://blog.sina.com.cn/s/blog_4148e8630102vji9.html

http://blog.csdn.net/st75033562/article/details/52355239

http://www.manew.com/forum.php?mod=viewthread&tid=95751&page=1&authorid=75030(详细可看此)

前话:

       分辨率(Resolution):一般指屏幕显示的分辨率,屏幕所能显示像素的多少,分辨率160×128的意思是水平方向含有像素数为160个,垂直方向像素数128个。

                                               屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。

                      像素比         :是指每个格子--像素是方的还是扁的1:1就是正方的,4:3是有点扁,16:9是很扁。

             宽高比(画面比):指视频图像的宽度和高度之间的比率。

①实际的屏幕宽高比不一定是分辨率之比,除非它的像素比是1:1。
②实际的屏幕宽高比=横向分辨率×横向像素长度 : 纵向分辨率×纵向像素长度。

有关系:分辨率*像素比=宽高比——640*1:360*1=16:9

比如有一部电影,分辨率640*360,画面宽高比16:9(640:360),那么其像素比正好是1:1,整个电影画面分成640*360块,每小块都是一个正方形像素;

 http://product.pconline.com.cn/itbk/sjtx/sj/1109/2521897.html

话不多说,进入正题!

Canvas Scaler:“画布缩放器”,用于控制画布中UI元素的整体比例和像素密度的组件。此缩放比例会影响“画布”下的所有内容,包括字体大小和图像边框。

                           ——即UI Cavas的整体缩放比例,以适应不同的分辨率。

        三种模式:

                          1.Constant Pixel Size:无论屏幕大小如何,都使UI元素保持相同的像素大小

                                                             ——即固定UI像素尺寸

                                        Scale Factor:用于缩放整个Canvas,而且调整Canvas Size与Screen Size一样,这样画布上的物件会相应缩放

                                                         ——即透过此Scale Factor直接缩放所有UI元素

                            2.Constant Physical Size:无论屏幕大小和分辨率如何,使UI元素保持相同的物理大小
                                                                  ——即固定UI物理尺寸
                       3.Scale With Screen Size :透过设定的Reference Resolution来自动缩放
 
下面这段官网翻译理解画布随分辨率改变而发生的剪切很重要:

Scale With Screen Size:

随着屏幕尺寸缩放

Using the Scale With Screen Size mode, positions and sizes can be specified according to the pixels of a specified reference resolution. If the current screen resolution is larger than the reference resolution, the Canvas will keep having only the resolution of the reference resolution, but will scale up in order to fit the screen. If the current screen resolution is smaller than the reference resolution, the Canvas will similarly be scaled down to fit.

使用Scale With Screen Size模式,可以根据指定参考分辨率的像素来指定位置和尺寸。 如果当前的屏幕分辨率大于参考分辨率,画布将保持仅具有参考分辨率的分辨率,但将按比例放大以适应屏幕。 如果当前屏幕分辨率小于参考分辨率,Canvas将同样按比例缩小以适应。

——我暂时的理解:比如一1920*1080的预设分辨率画布,如图1,调整屏幕分辨率为2560*1780后,如图2,调整分辨率为800*600后,如图3;

                                “画布将保持仅具有参考分辨率的分辨率”----即保持1920*1080个像素,屏幕大小不变下,2560*1780分辨率具有更大的PPI,

                                 此时画布将显得较小,然后,对于新的分辨率尺寸屏幕,Unity(我设的Match=1)以高度为基准,横向削减或添加再放大

                                 Scale以适应屏幕;

                                  这里还有像素完美匹配伸缩的问题。

                                   

                                   图1                                                                          图2                                                                  图3 

        

If the current screen resolution has a different aspect ratio than the reference resolution, scaling each axis individually to fit the screen would result in non-uniform scaling, which is generally undesirable. Instead of this, the ReferenceResolution component will make the Canvas resolution deviate from the reference resolution in order to respect the aspect ratio of the screen. It is possible to control how this deviation should behave using the Screen Match Mode setting.nb

 如果当前的屏幕分辨率和参考分辨率的宽高比不同,逐个缩放每个轴以适应屏幕将导致非均匀的缩放,这通常是不期望的。 与此相反,ReferenceResolution组件将使Canvas分辨率偏离参考分辨率,以便尊重屏幕的宽高比。 使用Screen Match模式设置可以控制偏离的方法。

                                                       

Reference Resolution UI布局的设计分辨率大小。 如果屏幕分辨率比它更大,则UI将被放大,如果更小,则UI将被缩小
Screen Match Mode 如果当前分辨率的纵横比不符合参考分辨率,用于缩放画布区域的模式
        Match Width or Height 以宽度为参考来缩放画布或者以高度为参考来缩放,或者在这两者之间
        Expand 横向或纵向展开画布区域,所以画布的大小永远不会小于参考
        Shrink 在水平或垂直方向上裁剪画布区域,所以画布的大小永远不会比参考大
Match 确定缩放是使用宽度还是高度作为参考,还是两者之间的混合
Reference Pixels Per Unit 如果精灵具有‘Pixels Per Unit’设置,则精灵中的一个像素将覆盖UI中的一个单位
 
                                -——Screen Match Mode:有如下三种:                                 
                                                       1). Match Width Or Height:下面包含一个Mach属性,当处于最左边时,Match=0,屏幕高度对于UI大小完全没有任何影  响,只有宽度会对UI大小产生影响。
                                                              假设宽度为Reference Resolution宽度的x倍,则UI整体缩放为Reference   Resolution状态下的x倍。也就是说只有宽度等于Reference Resolution宽度时,才能做到pixel perfect,
                                                              否则像 素就会有拉伸 。当处于最右边时,Match=1,与上述情况正好相反,决定整体缩放值的是高度,而宽度则没有任何影响 处于中间某处时,对上述两者的影响进行权重加成 
                                                          2).Expand:扩大
                                                          3).Shrink:收缩
 
 
* Expand 缩放不剪切:当屏幕分辨率与设定不同时,选择变化较小的一个方向(横向还是纵向),进行缩放显示
  ,它会保证设计时分辨率能显示出来的缩放后依然能显示出来。
* Shrink 缩放剪切:当屏幕分辨率与设定不同时,选择变化较大的一个方向(横向还是纵向)进行缩放显示
  ,对于超出的部分剪切不显示。
 

Screen Match Mode—Expand

当屏幕分辨率大于参考分辨率时,选择变化较小的一个方向(横向还是纵向),作为放大Canvas Scale的标准,另一方向上的变化则是在整体缩放以后再进行补偿性的变化。此举旨在减少扩大分辨率时由于非等比扩大而对UI整体布局造成影响。适合制作较小标准尺寸,扩充到较大屏幕。

例如:Reference Resolution为800*600,(假设此时Canvas Scale为(1,1,1))。如果实际分辨率为800*800,那么Canvas Scale还保持为(1,1,1)因为宽度没有发生变化,只是单纯的高度增加了200。所以势必对布局造成一定得影响。1000*600的情况也是一样,Canvas Scale没有变化,只是单纯宽度增加了200。但如果实际分辨率变为1000*800,那么Canvas Scale就变成(1.25,1.25,1.25)。因为宽度是参考分辨率宽度的1.25倍,高度是1.33倍,那么取较小的1.25。 这个1.25倍的意义是:整体Canvas渲染放大1.25倍,横向或纵向的变化超过了1.25倍,则靠拉伸Canvas来变化,此时因为这部分变化,可能会对布局产生一些相对较小的影响,例如相对位置、某些元素的长宽比。

Screen Match Mode—Shrink

和Expand类似,但是更适合于缩小的情形。它会在屏幕尺寸缩小时,通过缩小CanvasScale尽量减少由于非等比缩小对布局产生的影响。按照影响较小的一个方向缩小的比例去缩小CanvasScale,然后再通过变形调整另外一个方向。

 

                       

余生很长,愿我们都活成自己喜欢的样子
原文地址:https://www.cnblogs.com/bananana/p/8611816.html