示例#1
0
        protected virtual void OnEnable()
        {
            m_IsEnable          = serializedObject.FindProperty("m_IsEnable");
            m_GroupName         = serializedObject.FindProperty("m_GroupName");
            m_AssetAssemblyType = serializedObject.FindProperty("m_AssetAssemblyType");
            m_AssetSearchers    = serializedObject.FindProperty("m_AssetSearchers");
            m_FilterOperations  = serializedObject.FindProperty("m_FilterOperations");

            #region --------------------------------------------- 搜索路径条件列表------------------------------------------------

            assetSearcherRList = new ReorderableList(serializedObject, m_AssetSearchers, false, true, true, true);
            //自定义列表名称
            assetSearcherRList.drawHeaderCallback = (rect) =>
            {
                EditorGUI.LabelField(rect, "资源路径内容搜索列表");
            };

            //自定义绘制列表元素
            assetSearcherRList.drawElementCallback = (curRect, index, isActive, isFocused) =>
            {
                SerializedProperty property = m_AssetSearchers.GetArrayElementAtIndex(index);

                //文件夹路径
                SerializedProperty folder = property.FindPropertyRelative("m_Folder");
                curRect.height     = EditorGUIUtility.singleLineHeight;
                folder.stringValue = EditorGUIUtil.DrawAssetFolderSelection(curRect, "m_Folder", folder.stringValue);

                //是否包括子文件夹
                SerializedProperty includeSubfolder = property.FindPropertyRelative("m_IncludeSubfolder");
                curRect.y += curRect.height;
                EditorGUI.PropertyField(curRect, includeSubfolder);

                //文件名过滤器正则表达式
                SerializedProperty fileNameFilterRegex = property.FindPropertyRelative("m_FileNameFilterRegex");
                curRect.y += curRect.height;
                EditorGUI.PropertyField(curRect, fileNameFilterRegex);
            };

            //设置元素高度
            assetSearcherRList.elementHeightCallback = (index) =>
            {
                return(EditorGUIUtility.singleLineHeight * 3 + 10);
            };

            //当添加新元素时的回调函数,自定义新元素的值
            assetSearcherRList.onAddCallback = (ReorderableList list) =>
            {
                if (list.serializedProperty != null)
                {
                    list.serializedProperty.arraySize++;
                    list.index = list.serializedProperty.arraySize - 1;
                    //设置默认
                    SerializedProperty item   = list.serializedProperty.GetArrayElementAtIndex(list.index);
                    SerializedProperty folder = item.FindPropertyRelative("m_Folder");
                    folder.stringValue = "";
                    SerializedProperty includeSubfolder = item.FindPropertyRelative("m_IncludeSubfolder");
                    includeSubfolder.boolValue = true;
                    SerializedProperty fileNameFilterRegex = item.FindPropertyRelative("m_FileNameFilterRegex");
                    fileNameFilterRegex.stringValue = "";
                }
                else
                {
                    ReorderableList.defaultBehaviours.DoAddButton(list);
                }
            };

            //当删除元素时候的回调函数,实现删除元素时,有提示框跳出
            assetSearcherRList.onRemoveCallback = (ReorderableList list) =>
            {
                if (EditorUtility.DisplayDialog("提示!", "移除这个元素吗?", "移除", "取消"))
                {
                    ReorderableList.defaultBehaviours.DoRemoveButton(list);
                }
            };

            #endregion ---------------------------------------end------ 搜索路径条件列表--------------------------------------



            #region --------------------------------------------- 过滤条件列表--对搜索路径二次过滤-------------------------
            filterOperationRList = new ReorderableList(serializedObject, m_FilterOperations, true, true, true, true);
            //自定义列表名称
            filterOperationRList.drawHeaderCallback = (rect) =>
            {
                EditorGUI.LabelField(rect, "二次过滤条件列表");
            };
            //自定义绘制列表元素
            filterOperationRList.drawElementCallback = (rect, index, isActive, isFocused) =>
            {
                EditorGUIUtil.BeginLabelWidth(40);
                {
                    EditorGUI.PropertyField(rect, m_FilterOperations.GetArrayElementAtIndex(index), new GUIContent("" + index));
                }
                EditorGUIUtil.EndLableWidth();
            };

            //添加元素
            filterOperationRList.onAddCallback += (ReorderableList list) =>
            {
                m_FilterOperations.InsertArrayElementAtIndex(m_FilterOperations.arraySize);
            };

            //当删除元素时候的回调函数,实现删除元素时,有提示框跳出
            filterOperationRList.onRemoveCallback = (ReorderableList list) =>
            {
                if (EditorUtility.DisplayDialog("提示!", "移除这个元素吗?", "移除", "取消"))
                {
                    ReorderableList.defaultBehaviours.DoRemoveButton(list);
                }
            };

            #endregion ---------------------------------------end------ 对搜索路径二次过滤--------------------------------------
        }