Canvas Scaler 这个组件用来做整体 UI 屏幕适配的。为什么是整体适配?因为适配时还会用到 RectTransform 中的 Anchor 属性。Canvas Scaler 的缩放模式与 Canvas 的渲染模式相关:当 Canvans 渲染模式为 Screen Space - OverlayScreen Space - Camera 时,缩放模式有三种;当 Canvans 渲染模式为 World Space 时,缩放模式只有一种。

1 Screen Space 渲染模式下的缩放模式

UI Scale Mode 的三种缩放模式如下:

  • Constant Pixel Size:固定像素大小模式,Canvas 画布中其他 UI 控件对象直接固定像素大小。
  • Scale With Screen Size:随屏幕大小改变自身大小模式,Canvas 画布中其他 UI 控件大小随屏幕大小改变自身大小。
  • Constant Physical Size:固定物理尺寸模式,Canvas 画布中其他 UI 控件采用固定物理尺寸。

1.1 Constant Pixel Size

不根据屏幕分辨率调整 Canvas 的缩放, 以 UI 元素的像素值 * Scale Factor 对应真实屏幕的像素点进行渲染。

  • Scale Factor:画布的缩放比例。默认况下为1,表示正常大小。
  • Reference Pixels Per Unit:每个 UI 单位对应的像素数。

1.2 Scale With Screen Size


根据真实屏幕的宽高来缩放 Canvas。

1.2.1 Reference Resolution:

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

1.2.2 Screen Match Mode

1.2.2.1 Match Width or Height

根据真实屏幕的宽高比按指定的 Match 值来缩放 Canvas。
Reference Resolution:UI 的设计尺寸,这个值需要自已定,也是美术做图的依据,一般为 1920 * 1080。
Match:决定 Canvas 按宽高缩放的权重值,当 Match = 0 时,按宽度进行 Canvas 等比缩放;当 Match 值 = 1 时,按高度度进行 Canvas 等比缩放。一般情况下这个值非 0 即 1,不用纠结中间值。

1.2.2.2 Expand

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

1.2.2.3 Shrink

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

1.3 Constant Physical Size

与 Constant Pixel Size 模式本质相同, Constant Pixel Size 通过逻辑像素大小调节来维持缩放,Constant Physical Size 通过物理大小调节来维持缩放。使用这种模式必须指定一个像素转换物理大小的因数,运行时通过具体设备的 DPI 计算最终的 Canvas 像素大小和缩放比例。

  • Physical Unit:用于指定 UI 位置和大小 的物理单位。
属性 描述 计算中的 targetDPI
Centimeters 厘米 2.54
Millimeters 毫米 25.4
Inches 英寸,约 25.4 毫米 1
Points 点,1/72 英寸,1/12 派卡 72
Picas 派卡,1/6 英寸 6
  • Fallback Screen DPI:如果未获取到屏幕的 DPI,将使用此值参与计算缩放。
  • Default Sprite DPI:预设的图片像素密度。
    官方代码:
float currentDpi = Screen.dpi;
float dpi = (currentDpi == 0 ? m_FallbackScreenDPI : currentDpi);
float targetDPI = 1;
switch (m_PhysicalUnit)
{case Unit.Centimeters: targetDPI = 2.54f; break;case Unit.Millimeters: targetDPI = 25.4f; break;case Unit.Inches:      targetDPI =     1; break;case Unit.Points:      targetDPI =    72; break;case Unit.Picas:       targetDPI =     6; break;
}SetScaleFactor(dpi / targetDPI);
SetReferencePixelsPerUnit(m_ReferencePixelsPerUnit * targetDPI / m_DefaultSpriteDPI);
  • Reference Pixels Per Unit:每个 unity 单位对应的像素数,要与目前的 Dpi 再运算求出新的值,再传入Canvas中求出大小,公式如下:
    新的 Reference Pixels Per Unit = Reference Pixels Per Unit * Physical Unit / Default Sprite DPI
    UI大小 = 原图大小(Pixels) / (Pixels Per Unit / 新的 Reference Pixels Per Unit)

2 World Space 渲染模式下的缩放模式

当 Canvans 渲染模式为 World Space 时,UI Scale Mode 只有一种。

  • Dynamic Pixels Per Unit Canvas:缩放值取决于此值的设定值。
  • Reference Pixels Per Unit:每个 UI 单位对应的像素数。

Unity Canvas Scaler 组件的使用相关推荐

  1. 【Unity3D-UGUI系列】(一)Canvas 画布组件详解

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875   大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉 ...

  2. UGUI中的Canvas、Camera和Canvas Scaler

    原文:http://www.jianshu.com/p/96fd1fbe8409 投影空间和屏幕空间 先不说UI,如果是一个普通渲染流程,一个Cube普通地被渲染. 800X600的屏幕中,右边的Cu ...

  3. Unity的camera组件

    Unity的camera组件 文章介绍的是个大概,其中rendering paths和culling.clear flag还有更详细的用法 正交和透视 unity的camera支持两种投影方式:正交和 ...

  4. unity ,color组件

    场景: Unity color组件是一种用于控制游戏对象颜色的组件.它可以通过调整红.绿.蓝和透明度通道来改变游戏对象的颜色.此外,Unity的color组件还可以通过编程方式修改游戏对象的颜色,例如 ...

  5. Unity自定义UI组件(十一) 雷达图、属性图

    前言 借用梦想世界宠物属性图 想必大家都在游戏中见过属性图用于展示多种属性的数值,可以较为直观的对比某种属性的缺陷或者是哪种属性有优势.在三维可视化领域也会遇到类似的属性对比,用属性图来展示最为合适. ...

  6. Unity自定义UI组件(七)渐变工具、渐变色图片、渐变遮罩

    欢迎阅读Unity自定义UI组件(七)渐变工具.渐变色图片.渐变遮罩 前言 在Unity中UGUI只为我们提供了最为基础的Image和RawImage两种可展示图片的组件,但是这两种组件要展示一些特殊 ...

  7. Unity使用LineRenderer组件画出菱形,长度,角度可任意调节

    首先说下我的思路: 开始想的比较简单,就是先建两个空物体分别挂上脚本,一个在X轴画直线,一个与X轴成angle夹角,通过计算得出坐标,这样就能画出一个菱形的角度,下面是实例图: 最后再写个脚本通过循环 ...

  8. unity获取脚本组件_王者荣耀是怎样炼成的(三)unity组件与脚本

    上回书说到了unity的基本操作.这回我们来侃侃unity中的组件与脚本. 目录结构 一.组件与脚本简介 1.组件 组件(Component),顾名思义,就是游戏物体的组成部件. 这和我们对现实生活的 ...

  9. Unity自定义UI组件(六)日历、日期拾取器

    前言 考虑到工业项目中可能会利用到类似日历的工具,就比如选取某个时间节点,所以我结合UGUI源码开发了日历工具和日期拾取器工具,简单易用,接口齐全,可中文显示,外观可自定义.只需要导入脚本,即可在Hi ...

  10. web 前端签名插件_匠心打造canvas签名组件

    本文首发于CSDN网站,下面的版本又经过进一步的修订. 原文:匠心打造canvas签名组件 导读 6月又是项目吃紧的时候,一大波需求袭来,猝不及防. 度过了漫长而煎熬的6月,是时候总结一波.最近移动端 ...

最新文章

  1. LOJ10074架设电话线
  2. css 圆形背景icon_我写CSS的常用套路(附demo的效果实现与源码)
  3. 函数式编程与REST的思考
  4. 《系统集成项目管理》第六章 项目整体管理
  5. nyoj655光棍的yy
  6. 夺命雷公狗---node.js---20之项目的构建在node+express+mongo的博客项目5mongodb在项目中实现添加数据...
  7. .NET Worker Service 作为 Windows 服务运行及优雅退出改进
  8. ServletContext的学习笔记(属Servlet学习课程)
  9. LeetCode 72. 编辑距离(DP)
  10. [Vuex系列] - Mutation的具体用法
  11. mysql数据库基础知识和安装与卸载(快速入门)
  12. LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
  13. python构建知识库_Python学习知识库
  14. linux 快速 命令快捷键,Linux的150个命令和快捷键 整理
  15. 互金协会:各相关机构即日起就高息现金贷等违规业务开展自查
  16. 红旗桌面4.0正式版最新使用方法和问题解答100例
  17. bzoj 4398:福慧双修
  18. proxmox VE备份优化手记--两次优化,大幅度提高性能
  19. UG翼型参数化建模方法及代码
  20. 《程序员的自我修养——链接,装载与库》读后总结

热门文章

  1. C#习题——三角形或者长方形的边长,计算其周长和面积
  2. java_求1到n英寸换算厘米 (右对齐,保留两位小数)
  3. 水文勘测工比赛计算机基本应用,水文勘测工技能大赛参赛感言
  4. html图片闪光效果,CSS实现的一闪而过的图片闪光效果
  5. 微信分享、极简微信分享、thinkphp微信分享、laravel微信分享、3分钟完成微信分享
  6. 用于深度学习的演化神经AutoML
  7. SAPlink 的初次使用
  8. 柳下惠_拔剑-浆糊的传说_新浪博客
  9. 为何电脑上不显示手机连接服务器,为什么我电脑都能连接上vpn手机却连不上
  10. panabit之Web认证