手机, 计算机显示器和电视屏幕具有各种形状和尺寸。要发布游戏, 我们必须支持不同的屏幕比例和分辨率。构建与所有平台兼容的响应式接口可能是具有挑战性的。
Godot带有强大的工具来管理和设计响应式用户界面。要开发我们的UI, 我们将使用控制节点。这些是在编辑器中带有绿色图标的节点。从救生棒到复杂的应用程序, 数十种方法都可以创建任何东西。 Godot的整个编辑器和插件都使用这些节点。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes.png)
文章图片
本指南将使我们开始进行UI设计。我们将学习:
- 建立游戏界面的五个最有用的控制节点
- 如何使用UI元素的锚点
- 如何使用容器放置和安排我们的用户界面
- 五个最常见的容器
他们具有独特的品质, 可以彼此合作。其他节点(例如Node2D, Sprite等)将无法工作。我们仍然可以使用某些与其他节点配合使用的节点, 例如Animation Player, Tween或StreamPlayer。控制节点是Canvasitems, 例如Node2D, 因此我们可以对其应用着色器。
所有控制节点共享主要属性;
- 锚
- 边界矩形
- 关注邻居
- 尺寸标记
- 余量
- 可选的UI主题。
五个常见的UI元素
Godot附带了数十个控制节点。这些编辑器中有很多可以帮助我们构建插件和应用程序。要了解有关它们的更多信息, 请单击有关高级UI节点和主题的指南。
对于大多数游戏, 我们只需要五种类型的UI元素和一些容器。这五个容器。
这五个控制节点是:
- 标签:用于显示文字
- TextureRect:主要用于背景或应为静态图像的所有内容。
- TextureProgress:适用于生命条, 负载条, 水平, 垂直或径向
- NinePatchRect:用于可扩展面板
- TextureButton:用于创建按钮
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes2.png)
文章图片
TextureRect
TextureRect在UI内显示纹理或图像。它类似于Sprite节点, 但提供了几种缩放模式。设置拉伸模式属性以更改其行为:
- 仅当Expand Farm正确时, Expand(compat)上的比例才会缩放纹理以适合节点的边界矩形。否则, 其行为类似于保持模式。向后兼容的默认模式。
- 比例尺测量纹理以适合节点的边界矩形
- 瓷砖会重复纹理, 但不会缩放
- 集中并放置迫使表面分别保持其原始形状, 分别位于框架的左上角或中心
- 保持宽高比并使元素居中, 但缩放表面, 但迫使其以原始宽高比分别保持在框架的左上角或中心。
- 当元素居中时保持宽高比覆盖, 但是较小的边边界矩形和其他一个剪辑适合节点的边界。
用红色调制的TextureRect。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes3.png)
文章图片
TextureButton
TextureButton类似于TextureRect, 除了它有五个纹理插槽:每个按钮状态一个。在大多数情况下, 我们将使用” 普通” , “ 按下” 和” 悬停” 纹理。如果我们的界面侦听键盘的输入, 则” 聚焦” 很有用。第六个图像插槽和单击” 蒙版” 使我们可以使用2位纯黑白图像来定义可单击区域。
在” 基本按钮” 部分中, 我们将找到更改按钮行为的复选框。当切换模式打开时, 当我们按下按钮时, 它将在活动状态和正常状态之间切换。默认情况下它是禁用的, 在这种情况下它将使用禁用的设计。 TextureButton与一帧纹理共享一些属性:调整大小和拉伸模式具有一个modulate属性来更改其颜色和调整大小。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes4.png)
文章图片
TextureProgress
TextureProgress图层具有3个精灵, 用于创建进度条。在纹理下方和上方将进度进度夹在中间, 显示进度条的值。
mode属性控制带材移动的方向:水平, 垂直或径向。如果将其设置为径向, 则” 初始角度” 和” 填充度” 属性将限制仪表的范围。
要为栏设置动画, 我们要查看类别部分。设置最小和最大属性以定义量规的范围。例如, 为了表示角色的生命, 我们需要将Min设置为0, Max设置为默认值1和100, 并设置Value属性以更新条形图。如果我们将” 最小值” 和” 最大值” 保留为默认值1和100, 并将” 值” 属性设置为40, 则将显示进度纹理的40%, 而其中的60%将保持隐藏状态。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes5.png)
文章图片
TextureProgress栏, 填充了三分之二
标签
标签将文本打印到屏幕上。我们将在检查器的” 标签” 部分中找到其所有属性。在” 文本” 属性中编写文本, 然后检查” 自动换行” 是否符合文本框的大小。如果Autowrap关闭, 我们将无法缩放节点。我们可以分别使用Align和Valign将文本水平和垂直对齐。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes6.png)
文章图片
标签图片
NinePatchRect
NinePatchRect将纹理分为3行和3列。当我们测量纹理时, 中心和侧面会平铺, 但永远不会围绕角落。创建面板, 对话框和可缩放的背景对于我们的UI很有用。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes7.png)
文章图片
NinePatchRect使用min_size属性缩放
有两个构建响应式UI的工作流
有两个工作流程可在Godot中构建可扩展和灵活的界面:
- 我们有许多容器节点可供使用, 可以为我们扩展和放置UI元素。他们控制自己的孩子。
- 另一方面, 我们有布局菜单。它有助于我们在其父元素内锚定, 放置UIUI元素并调整其大小。
当我们为游戏和工具创建UI时, 我们将对每种情况下最合适的内容有所了解。
使用锚点精确放置UI元素
将UI元素与锚点放在一起
控制节点具有大小和位置, 但是它们也具有边距和锚点。锚点定义节点左, 上, 右和下边缘的原点或参考点。更改四个锚点中的任意一个以更改边距的参考点
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes8.png)
文章图片
锚点属性
如何更换锚点?
像任何属性一样, 我们可以在检查器中编辑四个锚点, 但这不是最方便的方法。当我们选择一个控制节点时, 布局菜单将出现在工具栏中视口上方。它为我们提供了一个图标列表, 只需单击一下即可设置所有四个锚点, 而不是使用检查器的四个属性。仅当我们选择控制节点时, 才会显示布局菜单。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes9.png)
文章图片
视口中的布局菜单
锚相对于原始容器
每个锚点的值在0到1之间。对于左锚点和顶部锚点, 值0表示没有任何边距, 节点的边缘将与父容器的右边缘和底边缘对齐。另一方面, 边距表示以像素为单位的到锚点位置的距离, 而锚点是相对于原始容器的大小。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes10.png)
文章图片
边距相对于锚点位置, 与锚点相当。实际上, 我们将让容器为我们更新边距。
边距随锚变化
当我们移动或调整控制节点的大小时, 边距会更新。它们代表相对于父级的控制节点或容器的, 从控制节点的边缘到其锚点的距离, 正如我们稍后所看到的。如果没有父对象, 则边距将相对于在Rect部分中设置的节点的边界矩形。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes11.png)
文章图片
CenterContainer上的边距设置为” Full Rect” 锚点
尝试更改锚点或将我们的Control节点嵌套在Containers中:边距将更新。
我们几乎不需要手动编辑边距。始终尝试寻找一个可以帮助我们的容器; Godot带有节点, 可以为我们解决所有常见情况。是否需要在生活栏和屏幕边框之间添加空间?
使用MarginContainer。要建立垂直菜单吗?使用VBoxContainer。这些在下面更多。
UI元素使用形状标签填充可用空间
每个控制节点都有形状标志。它们告诉容器UI元素应如何缩放。如果我们在水平或垂直属性中添加” 填充” 标志, 则节点的边界框将占用所有可能的空间, 但它将尊重其同级并保留其大小。如果HBoxContainer具有3个TextureRect节点, 并且两个轴上都带有” Fill” 标志, 则它们将占用每个可用空间的三分之一, 但不占更多空间。容器将获取节点并调整其大小。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes12.png)
文章图片
HBoxContainer中的3个UI元素, 它们水平对齐
“ 扩展” 标志允许UI元素可以全部发生并推向其同级。它的边界矩形将相对于其父对象的边缘增大, 或者直到另一个UI节点将其阻塞为止。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes13.png)
文章图片
与上面相同的示例, 但中心节点必须” 扩展” 大小标志
我们将需要一些实践来了解size标签, 因为它们的效果可能会发生很大变化, 具体取决于我们如何设置界面。
使用容器自动排列控制节点
容器会自动排列所有子级的控制节点, 包括行, 列等中的其他容器。
使用它们在其界面或中心节点周围的边界矩形中添加填充。所有内置容器均在编辑器中更新, 因此我们可以立即看到效果。
容器具有一些用于组织UI元素的独特属性。要更改它们, 请转到检查器中的” 自定义常量” 部分。
五个最有用的容器
如果我们构建工具, 则可能需要所有容器:
- MarginContainer:用于在部分UI周围添加边距
- CenterContainer:主要用于将其子项在其边界框中居中
- VboxContainer和HboxContainer:用于在行或列中排列UI元素
- GridContainer:用于以网格状模式排列控制节点
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes14.png)
文章图片
MarginContainer在子节点的两侧添加边距。添加一个边角Corner, 该边角包含整个视口, 以在窗口和UI的边缘之间添加分隔。我们可以在容器的顶部, 左侧, 右侧或底部设置边距。无需勾选该复选框:单击相应的值框, 然后输入任何数字。它会自动激活。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes15.png)
文章图片
MarginContainer在Gam用户界面周围添加了40px的边距
有两个BoxContainer:VBoxContainer和HBoxContainer。我们不能添加Boxcontainer节点本身, 因为它是一个帮助程序类, 但是我们可以使用垂直和水平框容器。他们将节点组织成行或列。使用它可以在商店中排列商品, 或创建具有不同大小的行和列的复杂网格, 因为我们可以将它们嵌套到我们内心的内容中。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes16.png)
文章图片
HBoxContainer将UI元素水平对齐
VBoxContainer自动将其子级排列在列中。这使他们一个接一个。如果我们使用分离参数, 它将在其子元素之间留下空白。 HBoxContainer连续排列UI元素。它类似于VBoxContainer, 具有一个额外的add_spacer方法, 可从脚本中在第一个子节点之前或最后一个子节点之后添加spacer控制节点。
GridContainer允许我们以类似网格的模式排列UI元素。我们只能控制它的列数, 并且它将根据其子级数自行设置行数。如果我们有9个子级和3列, 则将有9÷3 = 3行。再添加三个孩子, 我们将有四行。换句话说, 随着我们添加更多的纹理和按钮, 它会创建新的行。像盒子容器一样, 它具有两个属性, 分别设置行和列之间的垂直和水平分隔。
![设计与控制节点的接口](http://www.srcmini.com/wp-content/uploads/2020/04/design-interfaces-with-the-control-nodes17.png)
文章图片
有两列的网格容器。它会自动调整每列的大小。
【设计与控制节点的接口】Godot的UI系统非常复杂, 还提供了更多功能。要了解如何设计更高级的界面, 请阅读使用其他控制节点设计高级UI。
推荐阅读
- Godot启动屏幕设计实例图解
- Progressive Web App(PWA)介绍
- Android 自动化
- Appium Desired Capabilities-General Capabilities
- android 种的WiFi相关
- Android探究之ANR
- 农行掌上银行app下载|农行掌上银行app安卓版下载
- read appSettings in configuration file by XElement with xmlns
- App Store兼容性问题