首页 > 其他分享 >Unity新版UI系统UI Toolkit初探

Unity新版UI系统UI Toolkit初探

时间:2024-03-18 22:13:48浏览次数:21  
标签:界面 Toolkit Unity UI 设计 UGUI

目前Unity中应用最广泛的官方界面系统是Unity UI,也就是通常说的UGUI。这个系统功能强大,官方支持较好,并且基于GameObject的设计和Unity开发的其他方面是一致的,便于理解和使用。但是,成也GameObject败也GameObject,因为每一个界面元素都要一个GameObject挂上好几个Component,当界面上的元素越来越多,UGUI的性能就比较吃紧了。使用代码直接控制绘制的IMGUI,界面设计上面的局限性太大,不直观不方便,运行效率上也不占优势,不太可能应用在游戏内的界面中,但是在编辑器的界面中使用比较规范。

那么,在制作这种游戏内的包含大量页面元素的界面的时候,有没有更好的替代方案呢? 这就要请出本文的主角,UI Toolkit了。

什么是UI Toolkit?

UI Toolkit是Unity官方推出的新一代UI框架,旨在取代现有的UGUI。虽然从目前来距离完全替代UGUI看还有很长的一段路要走,但是其优势也是不可小觑的。目前官方推荐Editor中的UI首选使用这个UI Toolkit,而放在游戏内的UI还是首选UGUI。

不同于UGUI基于GameObject的设计,UI Toolkit使用了现在主流的文档对象模型(DOM)设计,把整个界面作为文档(Document)来看待。这种设计在应用开发和网页开发应用广泛,从Windows的WPF和WinUI,到Android应用和网页前端,类似的设计可以说已经成为了标配。而Unity这次便是参考网页的标准,设计出了这个新的UI框架。

怎么用UI Toolkit?

介绍完了这个UI框架,我们就来实际用一下,看看这东西到底怎么样。

如果你对Web前端开发有一些了解的话,应该知道网页文档中包含两类文件,一类是用来定义文档结构的HTML,一类是用来定义视觉样式的层叠样式表CSS。与之对应,UI Toolkit的界面文档包含了UXMLUSS两种资源,分别对应上述的两种文件。

Unity准备了配套的设计器调试器来辅助开发。设计器类似Visual Studio里面的WPF设计器,调试器则是神似浏览器的开发者工具。用这个调试器也可以查看编辑器内置的窗口的结构,可以看到现在还是过渡期,部分使用传统的IMGUI绘制的界面被放在了IMGUIContainer元素里面,嵌入到页面中。

004_01.png

使用设计器拖几个控件到界面上,我们就得到了一个简单的界面。这里我放了一个Label和两个Button。

004_02.png

要给按钮注册事件,目前来看只能通过脚本来初始化,而不能像UGUI那样在Inspector里面直观地手动编辑,也不支持像HTML一样直接把事件写在元素标签里面。绑定的时候可以先使用UIDocument.rootVisualElement来获取文档的根元素,然后通过名称test_button来查询其中的某个元素,然后给它注册事件。这个过程和JavaScript操作原生DOM也是非常类似的。代码如下:

var root = GetComponent<UIDocument>().rootVisualElement;

Debug.Log($"Document root: {root.name}");

var button = root.Q<Button>("test_button");
button.RegisterCallback<MouseUpEvent>((evt) => {
    Debug.Log("Button clicked!");
});

把脚本挂在UIDocument所在的GameObject上面,运行游戏,事件就被成功注册了。
004_03.png

小结

稍微总结一下,UI Toolkit的整体设计还是很接近Web前端的,如果有一点网页设计的经验应该会很容易上手。本篇文章只是开了一个头,简单探索了一下UI Toolkit的整体设计和使用方法。至于数据绑定和模板等进阶功能,且待下回分解。

标签:界面,Toolkit,Unity,UI,设计,UGUI
From: https://www.cnblogs.com/devbobcorn/p/18077410

相关文章

  • Layui实现删除及修改后停留在当前页
    1、功能概述?我们在使用layui框架的table显示数据的时候,会经常的使用分页技术,这个我们期望能够期望修改数据能停留在当前页,或者删除数据的时候也能够停留在当前页,这样的用户体验会更好一些,但往往事与愿违,实现这个功能非常的困难。本人经过多次实验,提供一种较为简单的,行之有效......
  • python控制UI实现桌面微信自动化
    Hello,我是新星博主:小恒不会java背景使用 wxpy 或者 itchat 这种第三方库通过Python控制自己的微信号,实现很多自动化操作,用的是微信网页版接口,不过随着微信的发展(信息安全等方面愈加重要,这种不符合官方期望出现的东西,很容易就破产。也由于itchat在python的request请......
  • Unity类银河恶魔城学习记录11-1 p103 Item源代码
     Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibiliItemData.csusingSystem.Collections;usingSystem.Collections.Generic;usingUn......
  • Unity类银河恶魔城学习记录10-14 p102 Applying damage to skills and clean up源代码
     Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibiliEntity.csusingSystem.Collections;usingSystem.Collections.Generic;usingUnit......
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的犬种识别系统(附完整代码资源+UI界面+PyTorch代码)
    摘要:本文介绍了一种基于深度学习的犬种识别系统系统的代码,采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果,能够准确识别图像、视频、实时视频流以及批量文件中的犬种。文章详细解释了YOLOv8算法的原理,并提供了相应的Python实现代码、训练数据集,以及基于PySide6的......
  • 随笔-Unity中的ScrollView如何跳转到指定的Item位置
         在我们平时开发滑动列表的UI时,虽然UGUI的ScrollView并不是很好用,但是有时一些非常简单的列表我们没有必要加入一些很复杂的列表插件,用简单的ScrollView就可以完成我们的需求。    我们可以通过计算列表中有多少个Item,再利用ScrollView中Content的长度来......
  • vue element-ui prop 同时校验两个输入框都不能为空
    <el-row><el-col:span="24"><el-form-itemlabel="故障阈值:"class="a_row":prop="addForm.thresholdFaultMin.length==0?'thresholdFaultMin':'thresholdFaultMax&#......
  • Fastapi中Swagger UI加载缓慢的解决方案
    在国内网络经常遇到SwaggerUI加载缓慢的问题,这是由于SwaggerUI的CSS和JS代码源在国外导致的,所以我们的解决方法是更改SwaggerUI的CSS代码和JS代码源到国内的CND实现加速。这里以Fastapi框架的SwaggerUI加载缓慢举例:一、解决方法在main.py(入口代码)代码中新增如下代码:fromfa......
  • 鸿鹄电子招投标系统源码实现与立项流程:基于Spring Boot、Mybatis、Redis和Layui的企业
    随着企业的快速发展,招采管理逐渐成为企业运营中的重要环节。为了满足公司对内部招采管理提升的要求,建立一个公平、公开、公正的采购环境至关重要。在这个背景下,我们开发了一款电子招标采购软件,以最大限度地控制采购成本,提高招投标工作的公开性和透明性,并确保符合国家电子招投标......
  • 【IT老齐047】避坑UUID主键
    【IT老齐047】避坑UUID主键场景财政部金财工程平台在代理行日终结算时,经常出现磁盘的IO异常,导致经常出现高延迟对比发现在大量数据新增时磁盘IO居高不下,多次测试后发现是UUID主键在搞鬼UUID基于时间的UUID能保证不同设备UUID是唯一的在同一设备上生成UUID可能重复DC......