Unity3D :运行时 UI 入门

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生

运行时 UI 入门

您可以创建运行时用户界面
并通过以下步骤在游戏视图中显示它:

  1. 创建包含控件的 UI 文档 (.uxml)。
  2. 在场景中添加 UIDocument 游戏对象,并将 UXML 文件添加为其源资产。
  3. 创建单一行为以定义 UI 控件的行为。

请尝试以下简单的运行时 UI 示例以开始使用。该示例在现场
.当您单击该按钮时,控制台窗口
显示一条消息。选择切换开关并单击按钮时,“控制台”窗口将显示单击按钮的次数。在文本字段中输入文本消息时,“控制台”窗口将显示该消息。

先决条件

本指南适用于熟悉 Unity 编辑器、UI 工具包和 C# 脚本的开发人员。在开始之前,请熟悉以下内容:

  • 用户界面生成器
  • 用户体验
  • 可视化树
  • 标签
  • 按钮
  • 切换
  • 文本字段

您可以在此 GitHub 存储库中找到此示例创建的已完成文件。

创建具有控件的 UI 文档

创建带有标签、按钮和切换的 UI 文档。有关如何使用 UI 生成器或 UXML 添加 UI 控件的信息,请参阅简单 UI 工具包工作流。

  1. 使用任何模板在 Unity 编辑器中创建项目。

创建具有以下内容的 UI 文档:SimpleRuntimeUI.uxml

<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>

设置场景

创建用户界面目录游戏对象
,并将 UI 文档添加为源资源。

在示例场景中,选择“游戏对象> UI 工具包”>“UI 文档”。这将创建以下内容:

  • 具有面板设置资产和默认运行时主题的 UI 工具包文件夹。
  • 附加了 UI 文档组件的游戏对象,并且 UI 文档组件连接到面板设置资源。
  1. 在层次结构中选择 UIDocument 游戏对象,然后从您的项目窗口
    到 UI 文档组件的“源资产”字段检查员
    窗。这会将源资源引用到您创建的 UXML 文件。

定义 UI 控件的行为

若要添加逻辑,请创建一个附带脚本,该脚本派生自以访问 UI 文档组件引用的控件。MonoBehaviour

Unity 在组件上调用 UI 文档组件的源 UXML 时加载该组件。若要确保正确加载可视化树,请添加逻辑以与方法中的控件进行交互。OnEnableOnEnable

创建以以下内容命名的 C# 脚本:SimpleRuntimeUI.cs

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}");
    }
}

2. 添加 SimpleRuntimeUI.cs 作为 UIDocument GameObject 的组件。

3D建模学习工作室整理翻译,转载请注明出处!

上一篇:Unity3D :支持的事件 (mvrlink.com)

下一篇:Unity3D :在游戏视图中呈现 UI (mvrlink.com)

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号