[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()方法内也是没问题的

posted @   lovewaits  阅读(10102)  评论(0编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示