[Unity3D]编辑器扩展之数组或List显示
效果如下:
源码如下:
1 using System.Collections.Generic; 2 using UnityEditor; 3 using UnityEngine; 4 5 namespace XM.Editor 6 { 7 public class AssetBundleCreator : EditorWindow 8 { 9 [MenuItem("Tools/Build Asset Bundle")] 10 public static void BuildAssetBundle() 11 { 12 var win = GetWindow<AssetBundleCreator>("Build Asset Bundle"); 13 win.Show(); 14 } 15 16 [SerializeField]//必须要加 17 protected List<UnityEngine.Object> _assetLst = new List<UnityEngine.Object>(); 18 19 //序列化对象 20 protected SerializedObject _serializedObject; 21 22 //序列化属性 23 protected SerializedProperty _assetLstProperty; 24 25 26 protected void OnEnable() 27 { 28 //使用当前类初始化 29 _serializedObject = new SerializedObject(this); 30 //获取当前类中可序列话的属性 31 _assetLstProperty = _serializedObject.FindProperty("_assetLst"); 32 } 33 34 protected void OnGUI() 35 { 36 //更新 37 _serializedObject.Update(); 38 39 //开始检查是否有修改 40 EditorGUI.BeginChangeCheck(); 41 42 //显示属性 43 //第二个参数必须为true,否则无法显示子节点即List内容 44 EditorGUILayout.PropertyField(_assetLstProperty, true); 45 46 //结束检查是否有修改 47 if (EditorGUI.EndChangeCheck()) 48 {//提交修改 49 _serializedObject.ApplyModifiedProperties(); 50 } 51 } 52 } 53 }
上述原文地址http://blog.csdn.net/u012741077/article/details/54884623
------------------------------------修改-------------------------------------------------
需要在你修改面板的脚本里面定义变量(目前只实验成功了List),并要序列化,然后在对应的编辑器文件里面序列化这个脚本
1 SerializedObject serializedObject = new UnityEditor.SerializedObject(itemCollider); 2 SerializedProperty serializedPropertyMyInt = serializedObject.FindProperty("HideObjForOnEnable"); 3 if (itemCollider.IsOnEnableHideObj = EditorGUILayout.Toggle(new GUIContent("Is On Disable Hide Obj", "是否添加激活隐藏物体事件"), itemCollider.IsOnEnableHideObj)) 4 { 5 //开始检查是否有修改 6 EditorGUI.BeginChangeCheck(); 7 8 //显示属性 9 //第二个参数必须为true,否则无法显示子节点即List内容 10 EditorGUILayout.PropertyField(serializedPropertyMyInt, new GUIContent("Hide Obj For On Disable", "隐藏物体"), true); 11 12 //结束检查是否有修改 13 if (EditorGUI.EndChangeCheck()) 14 {//提交修改 15 serializedObject.ApplyModifiedProperties(); 16 }
效果如下:
经实验,直接写在OnInspectorGUI()方法内也是没问题的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构