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; } } ```

相关推荐
WarrenMondeville2 小时前
1.Unity面向对象-单一职责原则
unity·设计模式·c#
WarrenMondeville2 小时前
2.Unity面向对象- 开闭原则
unity·游戏引擎·开闭原则
呆呆敲代码的小Y2 小时前
UnityMCP+Claude+VSCode,构建最强AI游戏开发环境
人工智能·vscode·游戏·unity·游戏引擎·u3d·mcp
C蔡博士2 小时前
Unity TextMeshPro 中文本地化:动态生成最小字体集(解决边缘模糊、乱码问题)
unity·游戏引擎
m0_630182462 小时前
Unity TMP 中文字体生成
unity·游戏引擎
weixin_409383123 小时前
godot y排序定位 sprite原点 等轴视角地图块测试 isometric 碰撞测试 初学godot
游戏引擎·godot
万兴丶4 小时前
Unity用C#完成抖音小游戏接入引力引擎(Gravity Engine)完整指南,一篇文章讲清楚!
unity·c#·游戏引擎·抖音
WarrenMondeville6 小时前
4.Unity面向对象-接口隔离原则
java·unity·接口隔离原则
WarrenMondeville7 小时前
3.Unity面向对象-里氏替换原则
unity·游戏引擎·里氏替换原则
WarrenMondeville8 小时前
5.Unity面向对象-依赖倒置原则
unity·设计模式·依赖倒置原则