[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()方法內也是沒問題的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM