private void AddCustomSections() { Assembly[] loadedAssemblies = EditorAssemblies.loadedAssemblies; for (int i = 0; i < loadedAssemblies.Length; i++) { Assembly assembly = loadedAssemblies[i]; Type[] typesFromAssembly = AssemblyHelper.GetTypesFromAssembly(assembly); Type[] array = typesFromAssembly; for (int j = 0; j < array.Length; j++) { Type type = array[j]; MethodInfo[] methods = type.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); for (int k = 0; k < methods.Length; k++) { MethodInfo methodInfo = methods[k]; PreferenceItem preferenceItem = Attribute.GetCustomAttribute(methodInfo, typeof(PreferenceItem)) as PreferenceItem; if (preferenceItem != null) { PreferencesWindow.OnGUIDelegate onGUIDelegate = Delegate.CreateDelegate(typeof(PreferencesWindow.OnGUIDelegate), methodInfo) as PreferencesWindow.OnGUIDelegate; if (onGUIDelegate != null) { this.m_Sections.Add(new PreferencesWindow.Section(preferenceItem.name, onGUIDelegate)); } } } } } }