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填好属性名即可 ```csharp //测试组件 public class TestComp : MonoBehaviour { public int TestInt; public GameObject TestGO; } ``` ```csharp //测试组件的编辑器扩展 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; } } ``` ### 封装的数据对象 ```csharp [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代码 ```csharp //测试组件的编辑器扩展 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+数据对象 ```csharp [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 ItemList; } ``` TestComp.uxml添加一个ListView 因为这个List内的数据用的还是上个例子的TestItem, 就继续用TestItem.uxml了 (ListView非常方便,reorderable之类的样式,直接在UIBuilder就能用了) ```csharp //测试组件的编辑器扩展 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可以用name var listView = root.Q(); //makeItem赋值方法 listView.makeItem = m_ItemAsset.CloneTree; return root; } } ```

相关推荐
两水先木示2 小时前
【Unity3D】微信小游戏适配安全区域或胶囊控件(圆圈按钮)水平高度一致方案
unity·微信小游戏·安全区域·ui适配·胶囊控件·safearea
枯萎穿心攻击2 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
不绝1913 小时前
怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
网络·游戏·unity·游戏引擎
unicrom_深圳市由你创科技3 小时前
Unity开发如何解决iOS闪退问题
unity·ios·蓝桥杯
Yasin Chen8 小时前
C# Dictionary源码分析
算法·unity·哈希算法
深海潜水员16 小时前
【Behavior Tree】-- 行为树AI逻辑实现- Unity 游戏引擎实现
游戏·unity·c#
Thomas_YXQ1 天前
Unity3D游戏内存优化指南
游戏·unity·职场和发展·性能优化·蓝桥杯·游戏引擎·unity3d
chillxiaohan1 天前
Unity接入Steamworks.NET实现通信功能
unity
枯萎穿心攻击1 天前
响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法
开发语言·unity·c#·游戏引擎
X_StarX2 天前
【Unity笔记02】订阅事件-自动开门
笔记·学习·unity·游戏引擎·游戏开发·大学生