Version:

第22章 介绍用户界面

介绍用户界面

注意:
本章的关卡和资源可以在 GitHub 上找到: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch22_basic_ui

介绍

O3DE 带有自己的用户界面子系统 LyShine。系统的核心是在 LyShine Gem 中实现的(已在 MyProject 中启用),但为 LyShine 启用另外两个支持 Gem 也很有用。

例 22.1.启用 LyShine 及其支持 Gem

set(ENABLED_GEMS
  ...
  LyShine
  LyShineExamples     # new
  UiBasics            # new
)
注意:

LyShineExamples 和 UiBasics Gem 提供了额外的画布示例和 UI 元素。它们的集合位于 O3DE 安装中,位于 Gems\UiBasics\Assets\UI\Slices\Library 和 Gems \LyShineExamples\Assets\UI\Canvases\LyShineExamples。

注意:
启用这些 Gem 后,在 Visual Studio 中或使用 CMake 重新构建项目,关闭 Asset Process 并再次打开它。它应该有几百个新资产要处理。否则,您将不会看到新的 UI 元素。

在本章中,我们将创建一个叠加层来显示两个数字。此叠加层将用于保存足球比赛的比分

加载 UI

用户界面工作首先使用 UI Canvas Asset Ref 组件加载 UI 资源。

  1. 在关卡中创建新实体。
  2. 添加 UI Canvas Asset Ref 组件。

  1. 分配画布或创建新画布。
提示:
您可以通过单击 Canvas pathname 属性旁边的最右侧图标按钮,从此组件打开 UI 编辑器。
  1. 翻转 Load automatically 或使用 C++ API 加载画布。
   UiCanvasAssetRefBus::Event(entityId, &UiCanvasAssetRefBus::Events::LoadCanvas);

在 UI Editor 中创建 Canvas

UI Editor 是 O3DE Editor 的工具之一。您可以通过主菜单使用 Tools→ UI Editor 来调出它。

这将打开带有空画布的 UI Editor。画布是一起绘制的 UI 元素的容器。在开始之前,让我们将新的空画布保存到我们的项目位置。我们会将其保存到 C:\git\book\MyProject\Assets\UI\hud.uicanvas。

注意:
该位置在项目及其 Gem 中是可选的。无论您将资产放在项目下还是某个 Gem 下,Asset Processor 都会找到该资产,但最好遵循一些标准。

左侧的 Hierarchy (层次结构) 面板列出了 UI 实体的层次结构。基础系统使用 O3DE 实体和组件。Hierarchy panel (层次结构面板) 实质上是 Entity Outliner 的另一个版本。让我们创建一个画布,其中元素放置在画布的顶部中间部分。

图 22.1.元素层次结构

  1. 右键单击 Hierarchy 中的空白区域,然后选择 New 和 Empty element。
  2. 双击此元素将其命名为 Root。它将用作所有其他 UI 元素的父元素。
  3. 右键单击 Root element(根元素),然后单击 New (新建) 和 Element from Slice browser(切片浏览器中的元素)。
  4. 搜索 “panel” 并选择 “Panel.slice”。
  5. 右键单击面板元素,选择“新建”、“切片库中的元素”。从组 “UiBasics\Assets\UI\Slices\Library” 中选择 Text。
  6. 将文本元素重命名为“Score Text”。
提示:
元素的顺序决定了首先绘制哪个元素。首先绘制根元素,最后绘制叶元素。

我们有所需元素的轮廓,但面板太大,文本位于中心。移动和修改元素的方法是使用其 Transform2D 组件并通过 Mode 工具栏。

  1. 选择 “Root” 元素。
  2. 前往 properties 并找到 Transform 2D 组件。

  1. 在 Transform 2D (变换 2D) 组件的底部,找到 Scale to device 属性,将其设置为“Scale to fit Y (uniformly)”(缩放以适应 Y (均匀))。这将使内容适合视区屏幕的大小。这意味着您不必担心设置像素值,并且可以将下面的任何元素视为与实际视区屏幕大小成正比的值。

  2. 然后选择 top middle anchor。它是 Anchors (锚点) 部分下的一个小图标,在一个较大的灰色框内有一个白色框。

图 22.2.根元素

  1. 在 “Root” 元素下选择 “Panel” 元素。
  2. 选择填充整个可用空间的锚点。此锚点图标看起来像一个完整的白色方块。

图 22.3.面板锚点

  1. 选择“Panel”元素后,在 Mode 工具栏中,选择 scaling tool,并通过拖动顶部带有正方形的绿色工具线来减小元素的垂直大小。

图 22.4.缩放元素

  1. 选择“面板”元素后,在图像组件中,将 Alpha 值降低到小于 1.0。(0.77 是我的选择。这将使面板半透明。

图 22.5.图像的 alpha 值

  1. 在 层次结构 面板中,选择 “Score Text” 元素,然后应用填充所有可用空间的锚点。(它是右下角的锚点图标。

图 22.6.Score Text 元素

  1. 选择“为文本评分”元素后,转到其“文本”组件,并将“文本”值修改为“0 : 0”。您也可以更改字体和字体颜色。

图 22.7.Score Text 元素

  1. 保存画布。它看起来应该类似于此图像,其中带有文本的面板显示在画布的中间顶部。

绘制 UI Canvas

为了在整个屏幕上绘制这个新的 UI 画布,请将 Canvas pathname 设置为我们创建的画布。

设置 hud.uicanvas

由于我们还没有与此画布进行编程交互,因此请通过 Enable Load automatically (自动加载) 属性来自动加载它。

小结

注意:
本章的关卡和资源可以在 GitHub 上找到: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch22_basic_ui

我们现在已经完成了!我们创建的画布不会显示在 Editor 视区中,直到您使用 CTRL+G 进入游戏模式。执行此作时,您应该会在屏幕顶部看到 score UI。

游戏模式下的 UI 画布

下一章将以编程方式更新此 UI。