GUI 简介

Time:20 分钟

https://developer.roblox.com/assets/bltbbc45a3d1bd83a89/Intro-GUI-Banner.jpg Hexaria 标题屏幕(经 Biostream )许可使用)

GUI 表示图形用户界面(Graphical User Interface),用于向玩家显示游戏相关的信息。GUI 可用于向玩家显示其角色的等级、生命值和金币数量,也可以为菜单和物品栏系统创建按钮。在下图中,Hexaria 的游戏开发人员使用 GUI 显示了关于玩家的信息并创建了游戏内菜单。

添加 GUI 到游戏中

最常见的 GUI 类型是屏幕 GUI,其行为类似于将贴纸放在玩家屏幕上的 2D 区域。当玩家移动镜头或探索游戏世界时,屏幕 GUI 会保持在相同区域中(位于屏幕上)。

当您制作新的 Roblox 游戏时,此屏幕 GUI 区域开始并不存在 — 您需要添加它。最简便的方法是将其添加到 StarterGui 服务,以便在玩家加入游戏时将其复制到玩家的本地游戏会话中。

  1. 管理器窗口中,找到 StarterGui 对象。 https://developer.roblox.com/assets/bltec4b9d5dab192eae/Select-StarterGui-1.png

  2. 将鼠标悬停在该对象上并单击圆圈 ⊕ 按钮。 https://developer.roblox.com/assets/blt25db36987baaf715/Select-StarterGui-2.png

  3. 在弹出菜单中找到 ScreenGui 并选择它,这将在您的 3D 游戏世界上方创建一个新的 2D 屏幕区域。 https://developer.roblox.com/assets/blt097a958fc708fa79/Select-ScreenGui.png

添加项目至屏幕 GUI

这个新的屏幕 GUI 当前为空 — 它只是一幅覆盖整个玩家屏幕宽度和高度的空白画布。

添加文本标签

各种内容都可添加至屏幕 GUI。我们先从基本的文本标签开始。

  1. 在管理器窗口中将鼠标悬停在作为 StarterGui 子项的新 ScreenGui 对象上,并单击其圆圈 ⊕ 按钮。 https://developer.roblox.com/assets/bltf0201a77763d92e6/Add-TextLabel-1.png

  2. 在弹出菜单中找到 TextLabel 并选择它。请注意,通过在 “Search object(搜索对象)”输入字段中键入对象名称的前几个字母,可以更轻松地找到该对象。 https://developer.roblox.com/assets/blt7bbac02d7dbebeeb/Add-TextLabel-2.png

这将在游戏视图的左上角添加一个非常基本的文本标签。

https://developer.roblox.com/assets/blt333958352b9224ba/Add-TextLabel-3.png

这些步骤创建的新文本标签将作为** StarterGui 的子项 ScreenGui 的子项。由于这些对象都不存在于 3D 工作区中,因此您无法像选择常规部件一样使用 Select(选择)**工具选择它们。要选择任何这些与 GUI 相关的对象,您必须在创建它们的管理器窗口树中进行选择。

自定义标签

现在我们在屏幕中有了一个文本标签,但是一个写了 Label 的白色框用处不大。让我们将其改为一个显示”版本号“的 GUI,这是通常出现在菜单/简介屏幕上的显示元素,用于显示游戏的当前版本。

  1. 在管理器窗口中,选择新的 TextLabel 对象。 https://developer.roblox.com/assets/blta40a63b51f80c3d9/Select-TextLabel.png

  2. 通过选择 **View(视图)**选项卡并单击 **Properties(属性)**按钮,打开 **Properties(属性)**窗口。 https://developer.roblox.com/assets/bltc8a7d157bd64a3f3/Toggle-Properties.png

  3. 对于 Font 属性(位于** Text(文本)** 部分中),单击字体名称的右侧并从下拉菜单中选择** Highway**。 https://developer.roblox.com/assets/blte49f6473348dca94/Intro-GUI-Font-Changed.png

  4. Text 属性字段中,键入如 Version 1.0(版本 1.0) 的新名称。 https://developer.roblox.com/assets/bltb8fef8a1ac67cb69/Intro-GUI-Text-Changed.png

  5. TextSize 属性字段中,键入 35https://developer.roblox.com/assets/blt7475d7316092b82e/Intro-GUI-TextSize-Changed.png

  6. 现在展开 Data(数据) 部分(如果它尚未展开)。 https://developer.roblox.com/assets/blt1ab5ba1391304a69/Data-Section-Expand.png

  7. 对于 BorderSizePixel 值,输入类似于 8 的新值。 https://developer.roblox.com/assets/blt41709aa769b867be/Intro-GUI-BorderSizePixel-Changed.png

很不错!GUI 对象现在看起来好多了!如果希望更具创意,可尝试更改如 TextColor3BackgroundColor3BackgroundTransparency 等属性。

在屏幕 GUI 中定位项目

现在屏幕上有了一个基本的文本对象,让我们将其移动到新的位置。Roblox 中的每个 2D 对象都具有 ** Position** 属性,可用于根据其父对象确定将它绘制于何处。此位置由 ** X** 和 ** Y** 坐标设置,其中 ** X** 是水平位置,** Y** 是垂直位置。

https://developer.roblox.com/assets/blt37b4ff76a6df2492/XY-Axes.png

在首次创建时,所有 2D 对象都从屏幕左上角 0XY 位置开始,但是如何移动它? 让我们来看一下文本标签的 Position 属性并了解如何移动!

  1. 如果未选择 TextLabel 对象,请在管理器窗口中单击它。 https://developer.roblox.com/assets/blta40a63b51f80c3d9/Select-TextLabel.png

  2. 找到** Position** 属性并单击小箭头展开它。 https://developer.roblox.com/assets/bltede64106156ac48c/Expand-Position.png

  3. 现在,直接展开其下方的 XY 分支。请注意,每个分支都具有唯一的 Scale(缩放)Offset(偏移) 属性 — 可使用这些值为屏幕 GUI 中的文本标签定位。 https://developer.roblox.com/assets/bltf438813ac9679d6a/Expand-XY-Position.png

Scale 属性

Scale 属性表示父对象的宽度或高度的百分比。请记住,屏幕 GUI“画布”覆盖 3D 游戏视图的全宽和全高 — 这意味着 Scale 属性可用于根据屏幕全宽或全高的百分比将对象直接定位于视图的中心、紧靠左边缘或右边缘或者两者之间的任何位置。

虽然 Scale 表示百分比,但是您输入的值范围通常应介于 01 之间,其中 0 等于 0%,1 等于 100%。例如:

https://developer.roblox.com/assets/blt0f9c1447a2a5a11a/Scale-10.png

Scale = 0.1
全宽或全高的 10%

https://developer.roblox.com/assets/bltb754008fd7c8994c/Scale-50.png

Scale = 0.5
全宽或全高的 50%

https://developer.roblox.com/assets/bltcd65d1c9a68b5b20/Scale-95.png

Scale = 0.95
全宽或全高的 95%

现在,让我们将文本标签移至屏幕的水平中心。只需为 XScale 值输入** 0.5**,然后按 Enter/Return 键确认。

https://developer.roblox.com/assets/blt4673d0bcb8aac69a/Change-X-Scale-Position.png

文本标签现在应该更靠近游戏视图的中心。

https://developer.roblox.com/assets/bltef4c7697cd252ce1/TextLabel-X-Scale-Position.jpg

请记住,您的游戏将在不同宽高的屏幕上进行。例如,手机屏幕可能比 PC 或主机屏幕略宽(且略短)。Scale 是将对象定位在视图中心的最佳选择,在不同的屏幕上它将始终保持在中心。

Offset 属性

每组中的第二个属性称为 Offset。此属性不是按父项大小的百分比,而是按像素来移动元素的。如果要将 GUI 元素放在靠近游戏视图边缘的位置,您可以使用此属性。

让我们将文本标签放在靠近屏幕顶部边缘的地方。为 YOffset 值输入 50,然后按 Enter/Return 键确认。

https://developer.roblox.com/assets/bltbee4d513dbe033ac/Change-Y-Offset-Position.png

现在文本标签应在靠近屏幕顶部边缘的地方。

https://developer.roblox.com/assets/bltf68fee05960513b0/TextLabel-Y-Offset-Position.jpg

Offset 是将对象定位于视图边缘附近的最佳选择。使用此选项将确保对象在 PC、主机、平板电脑和手机上都保持在相同的基本屏幕位置。

锚点

如果您仔细看 GUI 对象的当前位置,您将注意到:它并非位于左右方向的正中心位置,即使将 PositionXScale 设置为 0.5 (50%) 也是如此。

https://developer.roblox.com/assets/bltc7407dcf58619379/Anchor-Intro.jpg

这是因为对象具有默认锚点。锚点是对象上用于与您设置的屏幕位置对齐的特定点。想象锚点如一根针穿过一张纸 — 针可以穿过纸上的任何位置,并且 Roblox 会使该针与您为对象设置的 Position 值保持一致。

在游戏编辑器窗口中,锚点由对象(在选中它时)上的小正方形轮廓显示。在创建新 GUI 对象时,锚点默认在其左上角 — 这就是为什么对象上的该点与之前设置的 XY 位置值保持一致。

https://developer.roblox.com/assets/blte4d6af9a014b49ef/Anchor-Point-Comparison.png

锚点基于的 XY 值是对象大小的百分比:0 等于 0%,1 等于 100%。

https://developer.roblox.com/assets/blt89bbeb2323d5ff16/Anchor-Diagram.png

您可以使用此概念将 GUI 对象置于屏幕的正中心。

  1. 如果未选择 TextLabel 对象,请在管理器窗口中单击它。

  2. 找到 AnchorPoint 属性并单击小箭头展开它。 https://developer.roblox.com/assets/blt6983e77005485224/Expand-AnchorPoint.png

  3. X 值设置为 0.5,然后按 Enter/Return 键确认。 https://developer.roblox.com/assets/blta266e5ec84b755b8/Anchor-X-Changed.png

文本标签现在应该精确定位在游戏视图的中心。

https://developer.roblox.com/assets/blt9b8066a6815f8c12/Anchor-Centered.jpg

锚点值并非限制为 00.51 — 您可以输入介于这些值之间的任何值,如 0.250.8 等,但是无法设置小于 0 或大于 1 的锚点。

调整屏幕 GUI 中项目的大小

如您所见,PositionAnchorPoint 属性可用于将元素放置在屏幕 GUI 中的任何位置。我们还可以更改任何元素的大小,方法是使用其 Size 属性。

  1. 如果未选择 TextLabel 对象,请在管理器窗口中单击它。

  2. 找到 Size 属性并单击小箭头展开它。 https://developer.roblox.com/assets/blt37f8a3b492a513e3/Expand-Size.png

  3. 现在,展开其下方的 XY 分支。与 Position 类似,每个分支都具有唯一的 ScaleOffset 属性。 https://developer.roblox.com/assets/blt46435a2a520926d3/Expand-XY-Size.png

Scale 属性

在设置 GUI 对象的尺寸时,Scale 属性与位置的工作原理相同,即表示父对象的宽度或高度的百分比。如果将 SizeXScale 设置为 0.5 (50%),该对象将正好为屏幕宽度的一半。

让我们测试一下!

  1. XScale 值输入 0.75,然后按 Enter/Return 键确认。 https://developer.roblox.com/assets/bltcf36ffcb589f6543/Change-X-Scale-Size.png

  2. XOffset 值输入 0,然后按 Enter/Return 键。 https://developer.roblox.com/assets/blt8e5bd54715a9e2d7/Change-X-Offset-Size.png

文本标签现在应该正好占据屏幕宽度的 75%。

https://developer.roblox.com/assets/blt83371ee45d40f3c6/TextLabel-X-Scale-Size.jpg

Offset 属性

正如上文所述,Size 也具有称为 Offset 的属性。如果希望所创建的按钮、标签或其他对象无论在哪个屏幕上显示时都保持相同数量的像素(宽度或高度),那么您可以使用 Offset 来定义尺寸。

要增加文本标签的高度,只需为 YOffset 值输入 150,然后按 Enter/Return 键确认。

https://developer.roblox.com/assets/blt227a606f25663b41/Change-Y-Offset-Size.png

现在,文本标签应该比以前高很多了!

https://developer.roblox.com/assets/bltf4b864a55db49b04/TextLabel-Y-Offset-Size.jpg

使用负偏移值

某些 GUI 布局只能使用 ScaleOffset 值的创意组合实现,您可以通过将 TextLabel 对象填充整个屏幕然后四条边全部都留出 20 像素的边距来一探究竟。

  1. PositionYOffset 设置为 20。这应该会略微向上提升对象。 https://developer.roblox.com/assets/blt733ae73915ef92b0/Position-Size-Combo-1.jpg

  2. 将 SSizeXScale 设置为 1(100% 的屏幕宽度)。

  3. SizeXOffset 设置为 -40 — 这会使对象比整个屏幕宽度_少_ 40 像素,让两边都留出所需的 20 像素边距。 https://developer.roblox.com/assets/blt888ff380f80f3261/Position-Size-Combo-2.jpg

  4. SizeYScale 设置为 1(100% 的屏幕高度)。

  5. SizeYOffset 设置为 -40。正如以上所示,这会使对象比屏幕全高少 40 像素,让顶部和底部都留出 20 像素的边距。 https://developer.roblox.com/assets/blt3e0c50f4c4b6ea5c/Position-Size-Combo-3.png

挑战

至少还有一种其他设置组合将产生上面相同的 GUI 对象,您能想到吗?这里有一个提示:将锚点设置为 TextLabel 对象的_中心_,然后根据需要调整 ScaleOffset 值。

显示/隐藏

AnchorPoint 值

X 0.5

Y 0.5

Position 值

X Scale 0.5

Offset 0

Y Scale 0.5

Offset 0

Size 值

X Scale 1

Offset -40

Y Scale 1

Offset -40

Roblox官方链接:GUI 简介