本文转自Unity Connect博主 尹煜

画布 (Canvas) 是应该容纳所有 UI 元素的区域。画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。

画布

画布 (Canvas) 是应该容纳所有 UI 元素的区域。画布是一种带有画布组件的游戏对象,所有 UI 元素都必须是此类画布的子项。

创建新的 UI 元素(如使用菜单 GameObject > UI > Image 创建图像)时,如果场景中还没有画布,则会自动创建画布。UI 元素将创建为此画布的子项。

画布区域在 Scene 视图中显示为矩形。这样可以轻松定位 UI 元素,而无需始终显示 Game 视图。

画布 使用 EventSystem 对象来协助消息系统。


所有 UI 元素使用一个画布就足够了,但场景中可以有多个画布。此外,为了实现优化目的,还可以使用嵌套的画布,使一个画布作为另一个画布的子项。嵌套的画布使用与其父项相同的渲染模式。

传统上,渲染 UI 的效果就好像是直接在屏幕上绘制的简单图形设计。也就是说,没有摄像机观察 3D 空间的概念。Unity 便支持这种屏幕空间渲染方式,但也允许 UI 在场景中渲染为对象,具体取决于 Render Mode 属性的值。可用的模式包括 Screen Space - Overlay、Screen Space - Camera 和 World Space。

绘制元素的顺序

画布中的 UI 元素按照它们在 Hierarchy 中显示的顺序绘制。首先绘制第一个子项,然后绘制第二个子项,依此类推。如果两个 UI 元素重叠,则后一个元素将显示在前一个元素之上。

要更改元素的显示顺序,只需在 Hierarchy 中拖动元素进行重新排序。也可以通过在变换组件上使用以下方法从脚本控制顺序:SetAsFirstSibling、SetAsLastSibling 和 SetSiblingIndex。

渲染模式

画布具有渲染模式 (Render Mode) 设置,可用于在屏幕空间或世界空间中进行渲染。

Screen Space - Overlay

在此模式下,画布会进行缩放来适应屏幕,然后直接渲染而不参考场景或摄像机(即使场景中根本没有摄像机,也会渲染 UI)。如果更改屏幕的大小或分辨率,则 UI 将自动重新缩放进行适应。UI 将绘制在所有其他图形(例如摄像机视图)上。

注意:Screen Space - Overlay 画布需要存储在层级视图的顶级。如果未使用此设置,则 UI 可能会从视图中消失。这是一项内置的限制。请将 Screen Space - Overlay 画布保持在层级视图的顶级以便获得期望的结果。

Screen Space - Camera

在此模式下,画布的渲染效果就好像是在摄像机前面一定距离的平面对象上绘制的效果。UI 在屏幕上的大小不随距离而变化,因为 UI 始终会重新缩放来准确适应摄像机视锥体。如果更改屏幕的大小或分辨率或更改摄像机视锥体,则 UI 将自动重新缩放进行适应。场景中比 UI 平面更靠近摄像机的所有 3D 对象都将在 UI 前面渲染,而平面后的对象将被遮挡。


World Space

在此渲染模式下,画布的行为与场景中的所有其他对象相同。画布大小可用矩形变换进行手动设置,而 UI 元素将基于 3D 位置在场景中的其他对象前面或后面渲染。此模式对于要成为世界一部分的 UI 非常有用。这种界面也称为“叙事界面”。

此模式将 UI 视为场景中的平面对象进行渲染。但是,与 Screen Space - Camera 模式不同,该平面不需要面对摄像机,可以根据喜好任意定向。画布的大小可以使用矩形变换来设置,但画布在屏幕上的大小将取决于摄像机的视角和距离。其他场景对象可以位于画布后面、穿透画布或位于画布前面。

画布缩放器(Canvas Scaler)

画布缩放器组件用于控制画布中 UI 元素的整体缩放和像素密度。此缩放会影响画布下的所有内容,包括字体大小和图像边框。



Constant Pixel Size 的设置:

Scale With Screen Size 的设置:

Constant Physical Size 的设置:

World Space Canvas 的设置(画布 (Canvas) 组件设置为 World Space 时显示):

对于设置为“Screen Space - Overlay”或“Screen Space - Camera”的画布,画布缩放器 UI Scale Mode 可以设置为 Constant Pixel Size、Scale With Screen Size 或 Constant Physical Size。

Constant Pixel Size

使用 Constant Pixel Size 模式时,可在屏幕上按像素指定 UI 元素的位置和大小。这也是画布在未附加任何画布缩放器时的默认功能。但是,借助画布缩放器中的“Scale Factor”设置,可以向画布中的所有 UI 元素应用常量缩放。

Scale With Screen Size

使用 Scale With Screen Size 模式时,可以根据指定参考分辨率的像素来指定位置和大小。如果当前屏幕分辨率大于参考分辨率,则画布会保持只具有参考分辨率的分辨率,但是会放大以便适应屏幕。如果当前屏幕分辨率小于参考分辨率,则画布会相应缩小以适应屏幕。

如果当前屏幕分辨率的宽高比与参考分辨率不同,则单独缩放每个轴以适应屏幕会形成非一致缩放,通常不希望发生这种情况。相反,ReferenceResolution 组件会使画布分辨率偏离参考分辨率,以便遵循屏幕的宽高比。可以使用 Screen Match Mode 设置控制此偏离的行为方式。

Constant Physical Size

使用 Constant Physical Size 模式时,可按物理单位(如毫米、点或派卡)指定 UI 元素的位置和大小。此模式要求设备正确报告其屏幕 DPI。对于不报告 DPI 的设备,可以指定回退 DPI。

World Space

对于设置为“World Space”的画布,可以使用画布缩放器来控制画布中 UI 元素的像素密度。

画布组

画布组 (Canvas Group) 可集中控制整组 UI 元素的某些方面,而无需单独处理每个元素。画布组的属性会影响所在的游戏对象以及所有子对象。


画布组的典型用途为:

  • 通过在窗口的游戏对象上添加画布组并控制其 Alpha 属性来淡入或淡出整个窗口。
  • 通过将画布组添加到父游戏对象并将其 Interactable 属性设置为 false 来使整组控件不可交互(“灰显”)。
  • 通过在 UI 元素或其某个父元素上放置画布组 (Canvas Group) 组件并将其 Block Raycasts 属性设置为 false 来使一个或多个 UI 元素不阻止鼠标事件。

画布渲染器

画布渲染 器(Canvas Renderer) 组件用于渲染画布中包含的图形 UI 对象。

原文链接:https://connect.unity.com/p/canvas-hua-bu-he-ji-ben-bu-ju?app=true

戳上方链接下载官方app,在线技术答疑,更多干货等你来发现!

UGUI Canvas(画布)详解相关推荐

  1. 《HTML5 canvas开发详解(第2版)》——1.9 HTML5 Canvas对象

    本节书摘来自异步社区<HTML5 canvas开发详解(第2版)>一书中的第1章,第1.9节,作者: [美]Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社 ...

  2. 《HTML5 Canvas开发详解》——1.7 2D上下文及其当前状态

    本节书摘来自异步社区<HTML5 Canvas开发详解>一书中的第1章,第1.7节,作者: [美]Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社区&quo ...

  3. 《HTML5 canvas开发详解(第2版)》——1.3 本书使用的基础HTML页面

    本节书摘来自异步社区<HTML5 canvas开发详解(第2版)>一书中的第1章,第1.3节,作者: [美]Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社 ...

  4. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  5. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】

    目   录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...

  6. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

    Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canva ...

  7. 《Web前端开发精品课——HTML5 Canvas开发详解》——第一部分第二章节

    本节书摘来自异步社区<Web前端开发精品课--HTML5 Canvas开发详解>一书中的第1部分,第2章,作者:莫振杰 著,更多章节内容可以访问云栖社区"异步社区"公众 ...

  8. Unity UGUI Button 中文详解-Chinar

    Chinar blog :www.chinar.xin Unity UGUI 完整系列教程 (Chinar中文图解) Unity UGUI Button 组件 本文提供全流程,中文翻译. Chinar ...

  9. UGUI背包实现详解之一UGUI精准拖拽

    UGUI为开发者提供了许多实现交互的接口,包括拖拽类.点选类.鼠标指针类等,下面是最简单的UI拖拽实现方式: 将上边代码挂在UI上运行,就可以实现最简单的拖拽效果.但是这种方式存在问题:鼠标开始点下时 ...

  10. Canvas DrawText详解

    声明:内容转载自HenCoder(www.hencoder.com) 感谢大神扔物线 简介 上期的 Paint 详解里已经说过,文字的绘制所能控制的内容太多太细,必须拆成单独的一期专门来讲.今天这期, ...

最新文章

  1. Javascript与服务器同步时间
  2. 蓝桥杯7届c语言 c组答案,第七届蓝桥杯C语言C组-(自己懂的题目)
  3. gradle 上传jar包_Gradle学习记录014 关于依赖的声明
  4. ECCV 2020 Spotlight 谷歌论文大盘点
  5. Java 8 异步 API、循环、日期,用好提高生产力!
  6. 凸优化第四章凸优化问题 4.5 几何规划
  7. 集合之HashSet
  8. C语言编程入门——程序练习(下)
  9. Visio2013安装教程
  10. 俄罗斯方块英文JAVA版下载_俄罗斯方块java源代码完美版
  11. 使用jxbrowser在Swing中嵌入网页Web页面
  12. JavaScript 重定向
  13. itunes显示无法更新服务器失败怎么办啊,更新iTunes出现错误 iTunes更新失败解决方案...
  14. 零基础可以学板绘吗?怎么自学板绘?
  15. 每日启程——2019.12.11日(草木有本心,何求美人折)
  16. java可用作分隔符的特殊符号
  17. MyBatis从入门到精通(九):MyBatis高级结果映射之一对一映射
  18. ubuntu与主机ping不通的解决办法(主机检测不到虚拟网卡)
  19. 数据库授权与收回 4.13数据库课程
  20. 在Ubuntu20.04上安装二进制ros2 foxy

热门文章

  1. mix3android auto,小米MIX3滑盖全面屏值不值得买?三天真实体验说说优缺点
  2. Euclid‘s Game(博弈)
  3. 故障排除经验——笔记本电脑重启后键盘失灵的解决办法(亲测可用)
  4. php程序员的情书,2018浪漫七夕:7款程序员必备表白源码(超炫酷)
  5. Deep Learning 效率神器推荐
  6. Windows无法ping通百度IP问题
  7. java pdf添加页码_java itext pdf 怎么加页码
  8. IO流案例:字符串反转
  9. 游戏HTML翻翻乐,大班益智游戏翻翻乐优秀教案
  10. docker出现 Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use的解决方法