您可以通过以下步骤创建运行时 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
参见 术语表 并将其显示在游戏视图中。
尝试以下简单的运行时 UI 示例以入门。该示例在 场景场景包含游戏中的环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,基本上是逐段设计和构建您的游戏。 更多信息
参见 术语表 中添加了一个标签、一个按钮、一个切换按钮和一个文本字段。当您单击按钮时,控制台窗口Unity 编辑器窗口,显示 Unity 或您自己的脚本生成的错误、警告和其他消息。 更多信息
参见 术语表 会显示一条消息。当您选择切换按钮并单击按钮时,控制台窗口会显示按钮被单击的次数。当您在文本字段中输入文本消息时,控制台窗口会显示该消息。
本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容。
您可以在此 GitHub 存储库 中找到该示例创建的完成文件。
使用标签、按钮和切换按钮创建 UI 文档。有关如何使用 UI 生成器或 UXML 添加 UI 控件的信息,请参阅 UI 工具包入门。
在 Unity 编辑器中使用任何模板创建一个项目。
创建名为 SimpleRuntimeUI.uxml
的 UI 文档,其中包含以下内容。
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements"
xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements"
noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<ui:VisualElement style="flex-grow: 1;">
<ui:Label text="This is a Label" display-tooltip-when-elided="true"/>
<ui:Button text="This is a Button" display-tooltip-when-elided="true" name="button"/>
<ui:Toggle label="Display the counter?" name="toggle"/>
<ui:TextField picking-mode="Ignore" label="Text Field" text="filler text" name="input-message" />
</ui:VisualElement>
</ui:UXML>
在 SampleScene 中创建一个 UIDocument 游戏对象Unity 场景中的基本对象,可以表示角色、道具、场景、相机、路径点等等。游戏对象的功能由附加到它的组件定义。 更多信息
参见 术语表,并将 UI 文档添加为源资产。
在 SampleScene 中,选择 游戏对象 > UI 工具包 > UI 文档。这将创建以下内容。
在层次结构中选择 UIDocument 游戏对象,并将 SimpleRuntimeUI.uxml 从您的 项目窗口显示 Assets
文件夹 (项目选项卡) 内容的窗口 更多信息
参见 术语表 拖动到 检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 术语表 窗口中 UI 文档组件的 源资产 字段。这将源资产引用到您创建的 UXML 文件。
要添加逻辑,请创建一个从 MonoBehaviour
派生的 C# 脚本,以访问 UI 文档组件引用的控件。
Unity 在 OnEnable
在组件上调用时加载 UI 文档组件的源 UXML。为了确保可视树正确加载,请在 OnEnable
方法中添加与控件交互的逻辑。
创建一个名为 SimpleRuntimeUI.cs
的 C# 脚本,其中包含以下内容。
using UnityEngine;
using UnityEngine.UIElements;
public class SimpleRuntimeUI : MonoBehaviour
{
private Button _button;
private Toggle _toggle;
private int _clickCount;
//Add logic that interacts with the UI controls in the `OnEnable` methods
private void OnEnable()
{
// The UXML is already instantiated by the UIDocument component
var uiDocument = GetComponent<UIDocument>();
_button = uiDocument.rootVisualElement.Q("button") as Button;
_toggle = uiDocument.rootVisualElement.Q("toggle") as Toggle;
_button.RegisterCallback<ClickEvent>(PrintClickMessage);
var _inputFields = uiDocument.rootVisualElement.Q("input-message");
_inputFields.RegisterCallback<ChangeEvent<string>>(InputMessage);
}
private void OnDisable()
{
_button.UnregisterCallback<ClickEvent>(PrintClickMessage);
}
private void PrintClickMessage(ClickEvent evt)
{
++_clickCount;
Debug.Log($"{"button"} was clicked!" +
(_toggle.value ? " Count: " + _clickCount : ""));
}
public static void InputMessage(ChangeEvent<string> evt)
{
Debug.Log($"{evt.newValue} -> {evt.target}");
}
}
将 SimpleRuntimeUI.cs 添加为 UIDocument 游戏对象的组件。