[UGUI]深入理解Canvas Scaler

原创 2015年07月09日 22:06:45

Canvas Scaler:

这是一个理解起来相当繁琐复杂的一个组件,但又是一个至关重要的组件,不彻底了解它,可以说对UGUI的布局和所谓的“自适应”就没有一个完整的认识。

Canvas Scale指的是UI Canvas整体的缩放比例,这个值在Canvas 的Render Mode为 Screen Space – Overlay 的情况下默认为1,在 Canvas 的 Render Mode 为 Screen Space – Camera 的情况下则不一定为1,会受到渲染UI的摄像机 参数影响(如果为Perspective 相机,会受到 Field Of View影响,如果是 Orthographic相机,会受到 Size影响)。

Canvas Scaler存在的意义:

为了适应不同的分辨率,我们可能会允许适当的UI整体性缩放,外加一些尽可能少的布局微调。 这样就能达到一个比较理想的效果。如果没有这个组件,Canvas的Scale默认情况下永远固定不变,那么分辨率变化时,只能单纯依靠锚点信息去调整UI,会对整体布局产生较大的影响,不能够达到“自适应”的目的。

什么是Pixelperfect?

PixelPerfect(完美像素)指的是一个UI素材本身的像素对应屏幕上一个像素的情况,这种情况下UI素材映射到屏幕上时没有任何拉伸和压缩,这种情况下UI显示效果非常清晰完美。

Ui Scale Mode–Scale With Screen Size

根据屏幕尺寸来调整UI的缩放值

Reference Resolution:

参考分辨率,即一开始制作时选定的屏幕分辨率,后面的选项参数都是根据它来计算的。

Screen Match Mode—Match Width Or Height

Match

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,然后再通过变形调整另外一个方向。

Ui Scale Mode—Constant Pixel Size

固定的UI缩放值

Scale Factor

直接设定UI的Canvas Scale,例如,设定为2,则Canvas Scale为标准状态下的2倍

版权声明:请尊重原创内容,转载请注明来源及链接。

UGUI之CanvasScaler的正确用法

转载:http://icemark.cn/blog/?p=279 很多人都知道,Unity在移动设备上的自适应依靠的是组件本身的Anchors和Canvas上的CanvasScaler ...
  • u012842807
  • u012842807
  • 2015年07月23日 11:25
  • 5726

Unity UGUI 原理篇(二):Canvas Scaler 縮放核心

Canvas Scaler Canvas Scaler是Unity UI系統中,控制UI元素的總體大小和像素密度的Compoent,Canvas Scaler的縮放比例影響著Canvas下的元素,包...
  • gz_huangzl
  • gz_huangzl
  • 2016年09月09日 10:14
  • 2879

关于Canvas Scaler的作用

今天的逼格来自于Canvas的一个组件Canvas Scaler(Script) 话说像勃主这么高(矮)大(穷)上(丑)的一个人,怎么又要来写这种低级基础的东西~~,这个原因吗,勃主就是这么注重...
  • qq_28824335
  • qq_28824335
  • 2015年09月06日 20:56
  • 3027

深入理解Canvas Scaler

Canvas Scaler:这是一个理解起来相当繁琐复杂的一个组件,但又是一个至关重要的组件,不彻底了解它,可以说对UGUI的布局和所谓的“自适应”就没有一个完整的认识。 Canvas Scale指...
  • AnYuanLzh
  • AnYuanLzh
  • 2015年10月26日 19:43
  • 500

Unity UGUI 原理篇(二):Canvas Scaler 縮放核心

Canvas Scaler Canvas Scaler是Unity UI系統中,控制UI元素的總體大小和像素密度的Compoent,Canvas Scaler的縮放比例影響著Canvas下的元素,包...
  • leansmall
  • leansmall
  • 2017年08月03日 22:22
  • 592

Canvas Scaler

Unity中的Canvas Scaler设置
  • smilewithyou02
  • smilewithyou02
  • 2015年10月17日 15:44
  • 456

关于Canvas Scaler的使用

很多人都知道,Unity在移动设备上的自适应依靠的是组件本身的Anchors和Canvas上的CanvasScaler 但是很多人却不知道应该怎么正确的去设置CanvasScaler的各项属性,...
  • zzmkljd
  • zzmkljd
  • 2016年08月27日 10:42
  • 540

UGUI多个Canvas的渲染先后层次关系设置

这几天在做游戏的WindowManager,一开始只是想到打开单一窗口和设置窗口并存的问题,一切运行良好。 但是昨天加了一个等待窗口(沙漏加菊花)之后就出现了问题。...
  • cp790621656
  • cp790621656
  • 2015年02月08日 13:05
  • 5351

获取UGUI子节点在Canvas的屏幕坐标

因为项目需要,需要我们能够在Canvas下获取UI子结点在2D屏幕中的坐标位置。这个子结点可以是嵌套的,如图,注意RectTransform中的Pos值 获得的2D坐标是以屏幕坐标的,比如你的Can...
  • duotemplar
  • duotemplar
  • 2015年12月15日 13:12
  • 1258

【UGUI】Canvas详解

1.Canvas Canvas组件提供所有UI存储、渲染的空间,即所有UI元素都必须作为Canvas对象的子对象。 Properties Screen Space - Overlay Set   ...
  • qq168213001
  • qq168213001
  • 2015年02月08日 15:50
  • 1467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[UGUI]深入理解Canvas Scaler
举报原因:
原因补充:

(最多只允许输入30个字)