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

UIElement编辑器扩展 组件 Inspector

UIElement编辑器扩展 组件 Inspector

https://docs.unity.cn/cn/2021.3/Manual/UIE-create-a-binding-uxml-inspector.html

简单开始

声明序列化VisualTreeAsset
[SerializeField] VisualTreeAsset visualTree;
声明完,直接在脚本的Inspector面板,把你这个界面的UXML拖进去就可以了,非常方便

基础的属性,在UIBuilder里拖好需要的组件,bingdingPath填好属性名即可

//测试组件
public class TestComp : MonoBehaviour
{public int TestInt;public GameObject TestGO;
}
//测试组件的编辑器扩展
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;[CustomEditor(typeof(TestComp))]
public class TestCompEditor : Editor
{[SerializeField]VisualTreeAsset m_InspectorXML;public override VisualElement CreateInspectorGUI(){var root = m_InspectorXML.CloneTree();return root;}
}

封装的数据对象

[Serializable]
public class TestItem
{public string name;public GameObject gameObject;
}
public class TestComp : MonoBehaviour
{public int TestInt;public GameObject TestGO;public TestItem Item;
}

对TestItem单独创建一个UXML,根据属性在UIBuilder拖好需要的组件

在TestCompEditor.cs,增加TestItem.uxml这个文件的声明

增加一点CreateInspectorGUI代码

//测试组件的编辑器扩展
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;[CustomEditor(typeof(TestComp))]
public class TestCompEditor : Editor
{[SerializeField]VisualTreeAsset m_InspectorXML;//增加的TestItem UXML[SerializeField]VisualTreeAsset m_ItemAsset;public override VisualElement CreateInspectorGUI(){var root = visualTree.CloneTree();var item = m_PropertyAsset.CloneTree();//指定TestComp的属性名item.bindingPath = "Item";//加入即可root.Add(item);return root;}
}

List+数据对象

[Serializable]
public class TestItem
{public string name;public GameObject gameObject;
}
public class TestComp : MonoBehaviour
{public int TestInt;public GameObject TestGO;public TestItem Item;public List<TestItem> ItemList;
}

TestComp.uxml添加一个ListView
因为这个List内的数据用的还是上个例子的TestItem, 就继续用TestItem.uxml了

(ListView非常方便,reorderable之类的样式,直接在UIBuilder就能用了)

//测试组件的编辑器扩展
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;[CustomEditor(typeof(TestComp))]
public class TestCompEditor : Editor
{[SerializeField]VisualTreeAsset m_InspectorXML;//增加的TestItem UXML[SerializeField]VisualTreeAsset m_ItemAsset;public override VisualElement CreateInspectorGUI(){var root = visualTree.CloneTree();var item = m_ItemAsset.CloneTree();item.bindingPath = "Item";root.Add(item);//找到TestComp.uxml添加的ListView,多个List可以用namevar listView = root.Q<ListView>();//makeItem赋值方法listView.makeItem = m_ItemAsset.CloneTree;return root;}
}
http://www.lryc.cn/news/285886.html

相关文章:

  • Flask 3.x log全域配置(包含pytest)
  • 枚举算法(穷举法)(暴力法)
  • 计算机网络学习The next day
  • ffmpeg中AVFrame解码linesize确定
  • 数据可视化 | 期末复习 | 补档
  • 【Docker】使用Docker安装Nginx及部署前后端分离项目应用
  • 28、web攻防——通用漏洞SQL注入HTTP头XFFCOOKIEPOST请求
  • c++:类和对象(1),封装
  • 三、安全工程—安全架构(CISSP)
  • Linux:shell脚本:基础使用(9)《数组》
  • TCP高并发服务器简介(select、poll、epoll实现与区别)
  • Linux中的软件包管理器yum
  • 如何使用支付宝沙箱环境本地配置模拟支付并结合内网穿透远程调试
  • 解决子元素的click事件会触发父元素的dbclick事件
  • 算法训练营Day38(动态规划1)
  • 基于Harris角点的多视角图像全景拼接算法matlab仿真
  • 数学建模--PageRank算法的Python实现
  • samba服务搭建,并将共享目录映射到windows
  • golang 中使用 statik 将静态资源编译进二进制文件中
  • 北京住总集团携手云轴科技ZStack获行业云平台领航者创新实践奖
  • 【漏洞攻击之文件上传条件竞争】
  • Buttton样式设置background属性失效的问题
  • 使用vue-pdf插件加载pdf
  • BP蓝图映射到C++笔记1
  • 龙芯+RT-Thread+LVGL实战笔记(30)——电子琴演奏
  • Python Process创建进程(2种方法)详解
  • 树莓派4B 使用树莓派官方烧录器烧录ubuntu20.04.5 排坑
  • 鸿蒙开发(五)鸿蒙UI开发概览
  • 应用层—HTTP详解(抓包工具、报文格式、构造http等……)
  • ISA Server 2006部署网站对比nginx