Пример #1
0
        //初始化值
        private void OnEnable()
        {
            seriObj = base.serializedObject;

            script = seriObj.FindProperty("m_Script");

            //把所有字段们缓存起来
            fields = ReflectionUtility.GetAllFields(this.target, fi => seriObj.FindProperty(fi.Name) != null);

            if (fields.All(fi => fi.GetCustomAttributes(typeof(OLiOYouxiAttribute), true).Length == 0))
            {
                //哈哈哈哈,居然没有用奥利奥特性,那就用unity的把
                useDefaultInspector = true;
            }
            else
            {
                useDefaultInspector = false;

                //来把groupedFields缓存了
                groupedFields = new HashSet <FieldInfo>(fields.Where(fi => fi.GetCustomAttributes(typeof(AGroupAttribute), true).Length > 0));

                //来把groupedFieldsByGroupName缓存了
                groupedFieldsByGroupName = new Dictionary <string, List <FieldInfo> >();
                foreach (FieldInfo groupedField in groupedFields)
                {
                    //拿到组头名字 //第一个
                    string groupName = (groupedField.GetCustomAttributes(typeof(AGroupAttribute), true)[0] as AGroupAttribute).Name;

                    if (groupedFieldsByGroupName.ContainsKey(groupName))
                    {
                        //那就加入这个组
                        groupedFieldsByGroupName[groupName].Add(groupedField);
                    }
                    else
                    {
                        //新建一个组咯
                        groupedFieldsByGroupName[groupName] = new List <FieldInfo>()
                        {
                            groupedField
                        };
                    }
                }

                //来把serializedPropertiesByFieldName缓存了
                serializedPropertiesByFieldName = new Dictionary <string, SerializedProperty>();
                foreach (FieldInfo fieldInfo in fields)
                {
                    serializedPropertiesByFieldName[fieldInfo.Name] = seriObj.FindProperty(fieldInfo.Name);
                }
            }

            //来把nonSerializedFields缓存了
            nonSerializedFields = ReflectionUtility.GetAllFields(this.target,
                                                                 fi => fi.GetCustomAttributes(typeof(ADrawerAttribute), true).Length > 0 &&
                                                                 seriObj.FindProperty(fi.Name) == null
                                                                 );

            //来把nativeProperties缓存了
            nativeProperties = ReflectionUtility.GetAllProperties(this.target,
                                                                  pi => pi.GetCustomAttributes(typeof(ADrawerAttribute), true).Length > 0
                                                                  );

            //来把methods缓存了
            methods = ReflectionUtility.GetAllMethods(this.target,
                                                      mi => mi.GetCustomAttributes(typeof(ADrawerAttribute), true).Length > 0
                                                      );
        }