[Unity] GraphView 可视化节点的事件行为树(二) UI Toolkit介绍,制作事件行为树的UI

这篇具有很好参考价值的文章主要介绍了[Unity] GraphView 可视化节点的事件行为树(二) UI Toolkit介绍,制作事件行为树的UI。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前文

UI Toolkit 介绍

制作事件行为树的UI界面

GameObject关联编辑器窗口


前文

[Unity] 使用GraphView实现一个可视化节点的事件行为树系统(序章/Github下载)_Sugarzo的博客-CSDN博客_unity graphview

[Unity] GraphView 可视化节点的事件行为树(一) Runtime Node_Sugarzo的博客-CSDN博客

        在上一节中,我们已经介绍了Runtime中的节点运行逻辑,这一章节中将进入Editor部分。我们使用的是UI Toolkit的制作我们需要的事件行为树的UI面板。

UI Toolkit 介绍

        UI Toolkit是unity推出的一套全新UI系统。对比传统的GUI系统有着一套全新的工作流。在Unity 2021版本后已被内嵌到默认的编辑器中了。使用UI Toolkit可以很方便的构建属于自己的UI工具。在本章节中使用的是Editor UI的制作。

         在资源窗口右键,在Create->UI Toolkit->Editor Window中先创建我们需要的Asset。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

 unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        可以看到一个在UI Toolkit中的UI主要有三个模块组成:UXML,USS,C#。这里的组织结构和Web前端三件套很类似(HTML,CSS,JavaScript)。其中,UXML负责UI的布局和结构,USS负责UI样式,C#脚本负责UI的功能和行为。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        双击创建好的UXML,就可以进入UI Builder界面了。这是一个可视化编辑的窗口。中间的窗口就是当前这个UI的预览了。左边的Hierarchy窗口会展示当前UI的所有元素(当前只有一个Label),里面的所有元素都是以树状的父子结构组织起来的。最上面的第一个元素被称为根节点(root)。再点击里面的元素后,右边的Inspector窗口就会显示出该元素的所有属性。左下角的库窗口则是可以使用的UI 元素。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

         在UI Toolkit的所有UI元素中,Visual Element就是最最基础的元素了,他是所有UI元素的基类。也就是说只有继承Visual Element类才可以成为一个放在UI 布局中的元素。这个元素放在了Library中的第一个。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

         当然,在UI Toolkit中,放置UI元素也不仅仅局限在UI Builder里放置,也可以在C#脚本里使用代码进行添加。点开刚刚创建好的C#脚本,可以看到里面已经写好了一部分的样例代码,展示了3中在UI窗口中添加元素Label的方法(这里是对Root节点Add) 

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

 unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        好了,这里就是UI Toolkit的基本概念了。其中每个元素的具体样例在unity顶部菜单的window-UI Toolkit-Samples中都能找到代码例子,可以自行参考。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

制作事件行为树的UI界面

        本项目中的事件行为树UI布局参考:

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        可以看到构造还是比较简单的。左边是节点的Inspector面板,右边就是我们存放节点的网格图。可以从Librar已有元素直接拖入。

        关于对齐结构这里介绍几个右边常用的属性:Flex可以调整该元素的比例缩放(数值为0-1)和元素拓展方向(这里看图标用到的是从左到右),Align则是对齐方向。Size可以设置元素的大小(一般我自己会用百分比或者Auto)

        实际运行起来的截图如下

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        在Hirearachy除了本来Library中就有的元素外(在旁边的三点选项中打开Editor extension authoring可以打开Editor模式下的额外拓展包),还有我们自己创建的的两个UI元素:FlowChartView和InspectorView。

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

         前文提到过,想在UI Toolkit中放入我们新的元素,该元素一定继承自VisualElement。实际上我们需要使用的GraphView本身也是一个VisualElement

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        我们需要的节点区域和Inspector窗口面板的UI元素,就需要我们自己创建了。我们新建脚本,创建这两个元素的C#脚本,让他们继承自VisualElement和GraphView

public class InspectorView : VisualElement
{
    public new class UxmlFactory : UxmlFactory<InspectorView, UxmlTraits> { }
}
public class FlowChartView : GraphView
{
    public new class UxmlFactory : UxmlFactory<FlowChartView, GraphView.UxmlTraits> { }
}

        其中的new class UxmlFactory,可以让该元素显示在UI Builder中,我们就可以在Library-Project中看到我们新建的这两个UI元素,就可以拖入我们的UI窗口编辑了。 

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        默认的GraphView是一片黑屏。在这里,我们给我们的GraphView窗口添加上网格和拖拽缩放功能。

public class FlowChartView : GraphView
    {
        public new class UxmlFactory : UxmlFactory<FlowChartView, GraphView.UxmlTraits> { }

        public FlowChartEditorWindow window;

        public FlowChartView()
        {
            Insert(0, new GridBackground());

            this.AddManipulator(new ContentZoomer());
            this.AddManipulator(new ContentDragger());
            this.AddManipulator(new SelectionDragger());
            this.AddManipulator(new RectangleSelector());
            var styleSheet = AssetDatabase.LoadAssetAtPath<StyleSheet>("Assets/SugarzoNode/Editor/UIBuilder/FlowChart.uss");
            styleSheets.Add(styleSheet);

        }

        uss代码参考,上面代码的uss路径要根据项目实际路径进行设置。

GridBackground  {
    --grid-background-color: rgb(40,40,40);
    --line-color: rgba(192,196,192,0.1);
    --thick-line-color: rgba(193,196,192,0.1);
    --spacing: 15;
}

        这样,我们的行为树UI就制作好了。

GameObject关联编辑器窗口

        最后我们来学习如何打开我们制作好的UI。实际上,创建这个窗口的脚本模板里已经写入了MenuItem,可以在顶部菜单中直接打开这个UI窗口。 

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        但是我们的行为树是挂载到GameObject上的。每个GameObject上都有不同的节点图,自然也对应着不同的窗口数据。我们需要在对应GO的Inspector中打开它。 

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        先新建一个Runtime的FlowChart脚本,这个脚本搭载了MonoBehaviour,并给他添加一个静态方法让可以在物品创建菜单中方便我们直接创建出来。

public class FlowChart:MonoBehaviour
    {

#if UNITY_EDITOR
        [TextArea]
        public string note;

        [UnityEditor.MenuItem("GameObject/FlowChart", false, priority = 0)]
        private static void CreateFlowChartInScene()
        {
            var gameObject = new GameObject(typeof(FlowChart).Name);

            UnityEditor.Undo.RegisterCreatedObjectUndo(gameObject, "Create");

            gameObject.AddComponent<FlowChart>();

            if (Selection.activeGameObject != null)
            {
                gameObject.transform.parent = Selection.activeGameObject.transform;

            }
            Selection.activeGameObject = gameObject;
        }
#endif
    }

        再写一个Editor的FlowChart脚本,让它在Editor的Inspector中绘制一个按钮,用来打开这个物

品的UI面板(这里使用了一个static存储了数据)。注意本脚本要放在Editor文件夹下。

//在编辑器里绘制FlowChart的Inspector
    [CustomEditor(typeof(FlowChart))]
    public class FlowChartEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            //隐藏不需要显示的组件
            if (GUILayout.Button("Open"))
            {
                FlowChartEditorWindow.userSeletionGo = (target as MonoBehaviour)?.gameObject;
                FlowChartEditorWindow.OpenWindow();
            }
        }
    }
public class FlowChartEditorWindow : EditorWindow
    {
        public static void OpenWindow()
        {
            FlowChartEditorWindow wnd = GetWindow<FlowChartEditorWindow>();
            wnd.titleContent = new GUIContent("FlowChart");
        }

        /// <summary>
        /// 当前选择的游戏物品
        /// </summary>
        public static GameObject userSeletionGo;
}

 ​​​​​unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

unity ui toolkit 事件,Unity工具,Unity,Unity框架开发,ui,unity,c#,游戏引擎,游戏

        这样,我们就成功在Inspector中绘制出了一个可以打开我们的行为树UI窗口的按钮了。

        本节在这里就结束了。下一章应该就是最后一篇了,会介绍GraphView框架中的具体应用。文章来源地址https://www.toymoban.com/news/detail-772929.html

到了这里,关于[Unity] GraphView 可视化节点的事件行为树(二) UI Toolkit介绍,制作事件行为树的UI的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Unity可视化Shader工具ASE介绍——6、通过例子说明ASE节点的连接方式

    Unity可视化Shader工具ASE介绍——6、通过例子说明ASE节点的连接方式

    阿赵的Unity可视化Shader工具ASE介绍目录   大家好,我是阿赵。继续介绍Unity可视化Shader编辑插件ASE的用法。上一篇已经介绍了很多ASE常用的节点。这一篇通过几个小例子,来看看这些节点是怎样连接使用的。   这篇的内容可能会比较长,最终是做了一个遮挡X光的效果,不

    2024年02月07日
    浏览(17)
  • 天池赛:淘宝用户购物行为数据可视化分析

    天池赛:淘宝用户购物行为数据可视化分析

    目录 前言 一、赛题介绍 二、数据清洗、特征构建、特征可视化 1.数据缺失值及重复值处理 2.日期分离,PV及UV构建 3.PV及UV可视化 4.用户行为可视化 4.1 各个行为的面积图(以UV为例) 4.2 各个行为的热力图 5.转化率可视化 三、RFM模型 1.构建R、F、M 2.RFM的数据统计分布 3.计算

    2024年01月22日
    浏览(14)
  • 基于Python的淘宝行为数据可视化分析

    基于Python的淘宝行为数据可视化分析

    完成如下商业分析任务,通过数据分析和可视化展示,充分挖掘数据的价值,让数据更好地为业务服务: 流量分析 :PV/UV是多少,通过分析PV/UV能发现什么规律? 漏斗分析 :用户“浏览-收藏-加购-购买”的转化率是怎样的? 用户价值分析 :对电商平台什么样的用户是有价值

    2024年02月10日
    浏览(17)
  • 基于Python电商用户行为的数据分析、机器学习、可视化研究

    基于Python电商用户行为的数据分析、机器学习、可视化研究

    有需要本项目的源码以及全套文档和相关资源,可以私信博主!!! 在数字化和互联网技术飞速发展的推动下,消费者的购买能力和消费观念呈现不断升级和变迁的趋势。用户消费数据的爆炸式增长,为我们提供了寻找潜在价值信息的机会。 本研究使用了阿里巴巴提供的淘

    2024年02月04日
    浏览(12)
  • 毕业设计 大数据电商用户行为分析及可视化(源码+论文)

    毕业设计 大数据电商用户行为分析及可视化(源码+论文)

    今天学长向大家介绍一个机器视觉的毕设项目,大数据电商用户行为分析及可视化(源码+论文) 项目运行效果: 毕业设计 基于大数据淘宝用户行为分析 项目获取: https://gitee.com/assistant-a/project-sharing 这是一份来自淘宝的用户行为数据,时间区间为 2017-11-25 到 2017-12-03,总计

    2024年02月22日
    浏览(15)
  • 【TIANCHI】天池大数据竞赛(学习赛)--- 淘宝用户购物行为数据可视化分析

    【TIANCHI】天池大数据竞赛(学习赛)--- 淘宝用户购物行为数据可视化分析

    目录 前言 一、数据集的来源和各个字段的意义 二、数据分析 1.引入库 2.读入数据 3.查看数据数量级 4.PV(Page View)/UV访问量 5.漏斗模型 6.用户购买商品的频次分析。 7.ARPPU(average revenue per paying user)  计算 ARPPU  ARPPU出图 8.复购情况分析 计算用户购买频次 复购周期分析 总结

    2024年02月09日
    浏览(14)
  • python毕设选题 - flink大数据淘宝用户行为数据实时分析与可视化

    python毕设选题 - flink大数据淘宝用户行为数据实时分析与可视化

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月01日
    浏览(22)
  • PyG基于DeepWalk实现节点分类及其可视化

    PyG基于DeepWalk实现节点分类及其可视化

    大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现),理论与实践相结合,如GCN、GAT、GraphSAGE等经典图网络,每一个代码实例都附带有完整的代码。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10 语言环

    2024年01月19日
    浏览(13)
  • 【毕业设计】基于大数据的京东消费行为分析与可视化 - python 机器学习

    【毕业设计】基于大数据的京东消费行为分析与可视化 - python 机器学习

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月04日
    浏览(47)
  • 大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

    大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月21日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包