当前位置: 首页 > news >正文

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包(UI Toolkit)不但可以用于创建编辑器UI,同样可以来创建运行时UI。

关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见:

1. Unity中的UI系统

2. 初识UI Toolkit - 编辑器UI

本文将通过一个简单示例来介绍如何使用UI工具包来创建运行时UI。

一、创建UI Document(.uxml)

1. 使用任意模板新建一个Unity项目。

2. 在Project中,右键点击Scene,选择Create > UI Toolkit > UI Document,命名为SimpleRuntimeUI

3. 在Project里,点击SimpleRuntimeUI右侧箭头展开后,双击inlineStyle,在文本编辑器里打开。并将文件内容替换为下面代码。

<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 Document与场景关联

1. 在场景中,选择菜单GameObject > UI Toolkit > UI Document,新建一个对象。在Hierarchy中选择UIDocument,将Project中的SimpleRuntimeUI.uxml拖到Inspector中的Source Asset中。

三、创建MonoBehaviour脚本

1. 选择菜单Assets > Create > Scripting > Monobehaviour Script,创建脚本并命名为SimpleRuntimeUI.cs

2. 双击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}");

    }

}

3. 保存文件并返回Unity。在Hierarchy中选择UIDocument,将Project中的SimpleRuntimeUI拖到Inspector的空白处,给UIDocument添加脚本组件。

4. 点击“运行”,在Game窗口中就可以看到如下UI。点击Button,可以在控制台看到输出的消息。

http://www.lryc.cn/news/475850.html

相关文章:

  • 20.体育馆使用预约系统(基于springboot和vue的Java项目)
  • unity3d————三角函数练习题
  • 如何在Linux系统中使用Git进行版本控制
  • Ubuntu编译linux内核指南(适用阿里云、腾讯云等远程服务器;包括添加Android支持)
  • [MySQL]DQL语句(一)
  • GPT原理;ChatGPT 等类似的问答系统工作流程如下;当用户向 ChatGPT 输入一个问题后:举例说明;ChatGPT不是通过索引搜索的传统知识库
  • 目前最新最好用 NET 混淆工具 .NET Reactor V6.9.8
  • 计算布尔二叉树的值
  • Java-I/O框架09:InputStreamReader、OutputStreamWriter使用
  • 二十九、Python基础语法(继承-上)
  • JVM 复习1
  • 安装fpm,解决*.deb=> *.rpm
  • 基于MATLAB典型去雾算法代码
  • FrankenPHP实践
  • 嵌入式硬件电子电路设计(一)开关电源Buck电路
  • java项目之协力服装厂服装生产管理系统的设计与实现(springboot)
  • Java虚拟机的历程(jvm01)
  • [代码随想录Day4打卡] 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II 总结
  • java项目之校园周边美食探索及分享平台(springboot)
  • 支持 Mermaid 语言预览,用通义灵码画流程图
  • cangjie仓颉程序设计-数据结构(四)
  • Redis中储存含LocalDateTime属性对象的序列化实现
  • 蚁剑的介绍和使用
  • C++之多态的深度剖析(2)
  • 一篇文章 介绍 shiro反序列化漏洞
  • pyav保存视频
  • .bixi勒索病毒来袭:如何防止文件加密与数据丢失?
  • MySQL安装配置教程
  • Pandas进行数据查看与检查
  • ‌MySQL中‌between and的基本用法‌、范围查询