Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用

1. 什么是CanvasScaler组件?

CanvasScaler是Unity中UGUI系统中的一个组件,用于控制画布的缩放和适配。通过CanvasScaler组件,可以实现UI界面在不同分辨率下的自适应显示。

2. CanvasScaler的工作原理是什么?

CanvasScaler组件通过调整画布的缩放比例,使UI元素在不同分辨率下保持一致的显示效果。它根据设定的参考分辨率和屏幕分辨率的比例,计算出缩放比例,并将其应用到画布上。

3. CanvasScaler的常用属性有哪些?

  • UI Scale Mode:设置画布的缩放模式,有Constant Pixel Size(像素大小不变)、Scale With Screen Size(根据屏幕大小缩放)和Constant Physical Size(物理大小不变)三种模式可选。
  • Reference Resolution:设置参考分辨率,用于计算缩放比例。
  • Screen Match Mode:设置屏幕匹配模式,有Match Width Or Height(宽度或高度匹配)和Expand(扩展)两种模式可选。
  • Match:设置屏幕匹配模式为Match Width Or Height时,指定宽度或高度的匹配比例。
  • Physical Unit:设置物理单位,用于计算Constant Physical Size模式下的缩放比例。

4. CanvasScaler的常用函数有哪些?

  • SetScaleFactor(float scaleFactor):设置画布的缩放比例。
  • SetReferencePixelsPerUnit(float referencePixelsPerUnit):设置参考像素单位。
  • SetReferenceResolution(Vector2 referenceResolution):设置参考分辨率。
  • SetScreenMatchMode(ScreenMatchMode screenMatchMode, float matchWidthOrHeight):设置屏幕匹配模式和匹配比例。

5. CanvasScaler的使用示例代码:

示例1:设置画布的缩放模式为Scale With Screen Size

CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasScaler.referenceResolution = new Vector2(1920, 1080);
canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
canvasScaler.matchWidthOrHeight = 0.5f;

操作步骤:

  1. 获取CanvasScaler组件。
  2. 将uiScaleMode属性设置为Scale With Screen Size。
  3. 设置referenceResolution属性为参考分辨率,例如1920x1080。
  4. 将screenMatchMode属性设置为Match Width Or Height。
  5. 设置matchWidthOrHeight属性为匹配比例,例如0.5表示宽度和高度的匹配比例为1:2。

示例2:设置画布的缩放模式为Constant Pixel Size

CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ConstantPixelSize;
canvasScaler.scaleFactor = 2f;

操作步骤:

  1. 获取CanvasScaler组件。
  2. 将uiScaleMode属性设置为Constant Pixel Size。
  3. 设置scaleFactor属性为缩放比例,例如2表示画布放大两倍。

示例3:设置画布的缩放模式为Constant Physical Size

CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ConstantPhysicalSize;
canvasScaler.referencePixelsPerUnit = 100;

操作步骤:

  1. 获取CanvasScaler组件。
  2. 将uiScaleMode属性设置为Constant Physical Size。
  3. 设置referencePixelsPerUnit属性为参考像素单位,例如100表示每个单位对应100个像素。

示例4:动态设置画布的缩放比例

CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.SetScaleFactor(1.5f);

操作步骤:

  1. 获取CanvasScaler组件。
  2. 调用SetScaleFactor函数,设置画布的缩放比例为1.5。

示例5:动态设置画布的参考分辨率

CanvasScaler canvasScaler = GetComponent<CanvasScaler>();
canvasScaler.SetReferenceResolution(new Vector2(1280, 720));

操作步骤:

  1. 获取CanvasScaler组件。
  2. 调用SetReferenceResolution函数,设置画布的参考分辨率为1280x720。

注意事项:

  • 在使用CanvasScaler组件时,需要将Canvas的Render Mode设置为Screen Space - Camera或Screen Space - Overlay,否则CanvasScaler将无效。
  • 在设置参考分辨率时,应根据目标平台的分辨率进行调整,以保证UI在不同设备上的显示效果一致。

参考资料:

Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用的更多相关文章

  1. Unity UGUI——提供可视功能的UI组件(Text)

    基本属性介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fontsize/400/fill/I0J ...

  2. Unity UGUI Layout自动排版组件用法介绍

    Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. Unity UGUI

    超详细的基础教程传送门:(持续更新中) Unity UGUI之Canvas&EventSystem:http://blog.csdn.net/qq992817263/article/detai ...

  4. Unity ugui屏幕适配与世界坐标到ugui屏幕坐标的转换

    我们知道,如今的移动端设备分辨率五花八门,而开发过程中往往只取一种分辨率作为设计参考,例如采用1920*1080分辨率作为参考分辨率. 选定了一种参考分辨率后,美术设计人员就会固定以这样的分辨率来设计 ...

  5. Unity UGUI —— 无限循环List

    还记得大学毕业刚工作的时候是做flash的开发,那时候看到别人写的各种各样的UI组件就非常佩服,后来自己也慢慢尝试着写,发现其实也就那么回事.UI的开发其实技术的成分相对来说不算多,但是一个好的UI是 ...

  6. Unity UGUI图文混排源码(三) -- 动态表情

    这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...

  7. Unity UGUI之Canvas&EventSystem

    最近想写一套关于UGUI所有控件的基础使用教程系列,主要是根据本人的使用心得来写的,所以其中可能难以避免会有不正确的地方. 好了进入主题,既然是第一篇,我觉得我有必要先介绍一下UGUI必不可缺的两个组 ...

  8. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  9. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  10. 关于Unity中的刚体和碰撞器的相关用法(二)

    在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...

随机推荐

  1. 数组描述线性表(C++实现)

    线性表也称有序表,其每一个实例都是元素的一个有序集合 抽象类linearList 一个抽象类包含没有实现代码的成员函数,这样的成员函数称为纯虚函数,用数字0作为初始值来说明 template<c ...

  2. 3385. 【NOIP2013模拟】黑魔法师之门

    3385. [NOIP2013模拟]黑魔法师之门 题目大意: 做法: 代码: 题目大意: 给你一个无向无权图,每次询问加入一条边问你图中每个点的度数大于零且都是偶数的子图的个数对1000000009取 ...

  3. sklearn数据预处理中fit(),transform()与fit_transform()的区别

    1 概述 注意这是数据预处理中的方法: Fit(): Method calculates the parameters μ and σ and saves them as internal objec ...

  4. 关于 static

    由static定义的被称为类属性 例如(  static String company = "博客园"  ) 类方法 例如(  public static void printCo ...

  5. Jupyter Notebook(或vscode插件) 一个cell有多个输出

    方法一 在文件的开头加上如下代码,该方法仅对当前文件有效 from IPython.core.interativeshell import InteractiveShell InteractiveSh ...

  6. 【asp.net core】自定义模型绑定及其验证

    引言 水此篇博客,依旧是来自群里的讨论,最后说到了,在方法参数自定义了一个特性,用来绑定模型,优先从Form取,如果为空,或者不存在,在从QueryString中获取并且绑定,然后闲着无聊,就水一篇博 ...

  7. 我自己写了一个波场(Tron)本地网页版钱包

    最近由于项目需要,需要给每个用户分配一个充币地址,考虑到钱包安全性和方便管理,于是自己动手写了一个本地网页版的钱包,附上源代码跟大家交流下. Github 源代码地址 钱包和项目是分离的,项目通过鉴权 ...

  8. vue【解决方案】页面/路由跳转后,滚动条消失,页面无法滚动

    原因解析: vue项目中,页面/路由跳转后,body 的内联样式变成 overflow:hidden 解决方案: 使用路由守卫,在页面/路由跳转后,将body 的overflow设置为auto src ...

  9. 2023-01-12:一个n*n的二维数组中,只有0和1两种值, 当你决定在某个位置操作一次, 那么该位置的行和列整体都会变成1,不管之前是什么状态。 返回让所有值全变成1,最少的操作次数。 1 <

    2023-01-12:一个n*n的二维数组中,只有0和1两种值, 当你决定在某个位置操作一次, 那么该位置的行和列整体都会变成1,不管之前是什么状态. 返回让所有值全变成1,最少的操作次数. 1 &l ...

  10. vue全家桶进阶之路23:Element UI

    Element UI 是一套基于 Vue.js 的组件库,它提供了一系列常用的 UI 组件,包括表单.弹窗.布局.导航等等.Element UI 的设计风格简洁.易用.美观,且易于定制. Elemen ...