Unity UI(十一):多屏幕分辨率下的UI布局

        多屏幕分辨率下的UI布局一般考虑两个问题:
        1、布局元素的位置,即屏幕分辨率变化的情况下,布局元素的位置可能固定不动,导致布局元素可能超出边界;
        2、布局元素的尺寸,即在屏幕分辨率变化的情况下,布局元素的大小尺寸可能会固定不变,导致布局元素之间出现重叠等功能。
        为了解决这两个问题,在Unity GUI体系中有两个组件可以来解决问题,分别是布局元素的Rect Transform和Canvas的Canvas Scaler组件。
        1、Rect Transform,主要原理是Privot(锚点)对布局元素的位置控制作用,Privot对UI对象的位置的控制是通过UI对象与Privot相对的Pos X、Pox Y或者Top、Left、Botton和Right取值进行控制的,在不同屏幕分辨率下,UI对象的这些取值相当于Privot是固定不变的,这也是导致屏幕分辨率变化的情况下,布局元素的位置固定不动的原因。但是我们可以通过控制Privot的位置来确保UI对象一直在画布之内而不会超出界限。比如
(1)刚开始三个Button的Privot都在中心点,那么他们的pos X和pos Y都是相对于中心点Privot的坐标点,而且在改变屏幕分辨率时这些posX和posY不会变动。如下面两幅图对比所示:
Unity UI(十一):多屏幕分辨率下的UI布局_第1张图片

Unity UI(十一):多屏幕分辨率下的UI布局_第2张图片

(2)那么如何来实现呢?我们可以把每个Button的Privot的放到他们各自的对应的角上,则可以确保他们一致在屏幕范围内。

Unity UI(十一):多屏幕分辨率下的UI布局_第3张图片
当我们改变窗口分辨率时,我们发现这时Button均在屏幕范围内了。
Unity UI(十一):多屏幕分辨率下的UI布局_第4张图片

这时在一定程度上满足了我们的要求,当时我们发现Button的尺寸并未因为屏幕尺寸变小相应的变小,这时我们需要借助Canvas 的Canvas Scaler组件来实现。

        2、Canvas Scaler组件。
Unity UI(十一):多屏幕分辨率下的UI布局_第5张图片
(1)UI Scale Mode,设置成Scale with Screen Size,即随着屏幕尺寸变化;
(2)Reference Resolution:参考分辨率,即默认的分辨率。
(3)Screen Match Mode:屏幕匹配模式。

  • Screen Match Mode—Match Width Or Height
            Match是一个滑条,拉在最左时是Width ,最右时是Height,中间则是按比例混合。
            当处于最左边时,屏幕高度对于UI大小完全没有任何影响,只有宽度会对UI大小产生影响。假设宽度为Reference Resolution宽度的x倍,则UI整体缩放为Reference Resolution状态下的x倍。也就是说只有宽度等于Reference Resolution宽度时,才能做到pixel perfect,否则像素就会有拉伸
            当处于最右边时,与上述情况正好相反,决定整体缩放值的是高度,而宽度则没有任何影响
            处于中间某处时,对上述两者的影响进行权重加成
  • 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,然后再通过变形调整另外一个方向。

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

你可能感兴趣的:(Unity,VR,unity,ui)