深入理解Canvas Scaler

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倍

时间: 2024-10-09 01:14:23

深入理解Canvas Scaler的相关文章

Unity2017.1官方UGUI文档翻译——Canvas Scaler

Canvas Scaler 画布缩放器 The Canvas Scaler component is used for controlling the overall scale and pixel density of UI elements in the Canvas. This scaling affects everything under the Canvas, including font sizes and image borders. “画布缩放器”组件用于控制画布中UI元素的整

理解Canvas的save()和restore()方法

save()和restore()方法是绘制复杂图形必不可少的方法.它们分别是用来保存和恢复 canvas 状态的,都没有参数. Canvas 状态是以堆(stack)的方式保存的,每一次调用 save 方法,当前的状态就会被推入堆中保存起来.这种状态包括:当前应用的变形(即移动,旋转和缩放,见下):strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap, lineJoin, miterLimit, shadowOffsetX,shadowO

unity, get Canvas Scaler referenceResolution

需要using UnityEngine.UI; 然后就可以访问到CanvasScaler组件. float width=GetComponent<CanvasScaler> ().referenceResolution.x float height=GetComponent<CanvasScaler> ().referenceResolution.y

轻松实现HTML5时钟(分享下自己对canvas的理解,原来没你想像的那么难哦)

Hey,guys! 让我们一起用HTML5实现一下简易时钟吧! 接触canvas时, 我突然有一种非常熟悉的感觉------canvas的部分的功能其实和Photoshop中的 钢笔工具 是一样的.所以,如果你对 PS里的 钢笔工具 运用自如的话,恭喜你,canvas你将很快上手~~ 说下对HTML5中canvas的理解,canvas翻译成中文就是画布,顾名思义,canvas当然是用来作画的啦~~ 作画嘛,其实现的思想 与 photoshop 基本上是一样的~~,只不过photoshop可以用可

【UGUI速成班】—— 04. Canvas

这一节将主要讲述所有UGUI物体的最顶级父物体--Canvas前几讲为大家介绍了Text.Image和Button,主要陈述的是UGUI的功能性,但说到底凡是UI都需要考虑其界面排布和呈现等因素.因此在此章节的Canvas和下一章节的Rect Transform快速为大家补上! ----------------------- 4.Canvas Canvas 意思为画布,在Hierarchy栏目下右键==>UI,选择Canvas或者任何UGUI控件,我们仍以Image为例,那么在Hierarchy

H5 canvas的 width、height 与style中宽高的区别

Canvas 的width height属性 1.当使用width height属性时,显示正常不会被拉伸:如下 <canvas id="mycanvas" width="300" height="300">浏览器不支持Canvas,请升级或改用其它浏览器!</canvas> <script type="text/javascript"> var canvas = document.getE

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

关于Canvas: trying to use a recycled bitmap android.graphics的疑惑

============问题描述============ 因为viewpager图片内存溢出的问题,不得不考虑手动释放内存,不过出的问题我不理解. 我的想法是创建一个Map,然后用instantiateItem中的参数arg0当作键,bitmap当作值,当destroyItem中去掉VIew的时候我捎带着把不再用到的bitmap也回收掉 //这个是存bitmap的map public HashMap<Integer, SoftReference<Bitmap>> cacheBit;

关于Canvas Rect Transform 设置问题?

Render Mode: Screen Space - Overlay:将UI放置在场景的上面,调节场景大小或调整分辨率,则Canvas也会随之调整. Screen Space - Camera:Canvas由一个特定的相机渲染,相机的设置会影响UI. World Space:使Canvas像场景中的其他对象一样渲染. 默认情况为Screen Space - Overlay 模式, 即不能更改 Rect Transform  更换成  World Space 即可设置Rect Transform