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 小时前
游戏引擎中顶点着色&像素着色
游戏引擎·顶点着色器·像素着色器·顶点颜色·顶点uv·顶点法向
Thomas_YXQ4 小时前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
徐子竣12 小时前
[学习记录]Unity-Shader-几何着色器
unity·游戏引擎·着色器
EQ-雪梨蛋花汤18 小时前
【Part 3 Unity VR眼镜端播放器开发与优化】第四节|高分辨率VR全景视频播放性能优化
unity·音视频·vr
与火星的孩子对话1 天前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
幻世界1 天前
【Unity智能模型系列】Unity + MediaPipe + Sentis + ArcFace模型:构建高效人脸识别比对系统
unity·游戏引擎
漫游者Nova1 天前
虚幻引擎Unreal Engine5恐怖游戏设计制作教程,从入门到精通从零开始完整项目开发实战详细讲解中英字幕
ue5·游戏引擎·虚幻·游戏开发完整教程·恐怖游戏开发
死也不注释2 天前
【Unity 编辑器工具开发:GUILayout 与 EditorGUILayout 对比分析】
unity·编辑器·游戏引擎
小赖同学啊2 天前
物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
物联网·unity·游戏引擎
Zlzxzw2 天前
使用unity创建项目,进行动画制作
unity·游戏引擎