private static MonoCreateAssetItem[] ExtractCreateAssetMenuItems(Assembly assembly) { List <MonoCreateAssetItem> list = new List <MonoCreateAssetItem>(); System.Type[] typesFromAssembly = AssemblyHelper.GetTypesFromAssembly(assembly); foreach (System.Type type in typesFromAssembly) { CreateAssetMenuAttribute customAttribute = (CreateAssetMenuAttribute)Attribute.GetCustomAttribute(type, typeof(CreateAssetMenuAttribute)); if (customAttribute != null) { if (!type.IsSubclassOf(typeof(ScriptableObject))) { object[] args = new object[] { type.FullName }; UnityEngine.Debug.LogWarningFormat("CreateAssetMenu attribute on {0} will be ignored as {0} is not derived from ScriptableObject.", args); } else { string str = !string.IsNullOrEmpty(customAttribute.menuName) ? customAttribute.menuName : ObjectNames.NicifyVariableName(type.Name); string path = !string.IsNullOrEmpty(customAttribute.fileName) ? customAttribute.fileName : ("New " + ObjectNames.NicifyVariableName(type.Name) + ".asset"); if (!Path.HasExtension(path)) { path = path + ".asset"; } MonoCreateAssetItem item = new MonoCreateAssetItem { menuItem = str, fileName = path, order = customAttribute.order, type = type }; list.Add(item); } } } return(list.ToArray()); }
static MonoCreateAssetItem[] ExtractCreateAssetMenuItems(Assembly assembly) { var result = new List <MonoCreateAssetItem>(); foreach (var type in EditorAssemblies.GetAllTypesWithAttribute <CreateAssetMenuAttribute>()) { var attr = type.GetCustomAttributes(typeof(CreateAssetMenuAttribute), false).FirstOrDefault() as CreateAssetMenuAttribute; if (attr == null) { continue; } if (!type.IsSubclassOf(typeof(ScriptableObject))) { Debug.LogWarningFormat("CreateAssetMenu attribute on {0} will be ignored as {0} is not derived from ScriptableObject.", type.FullName); continue; } string menuItemName = (string.IsNullOrEmpty(attr.menuName)) ? ObjectNames.NicifyVariableName(type.Name) : attr.menuName; string fileName = (string.IsNullOrEmpty(attr.fileName)) ? ("New " + ObjectNames.NicifyVariableName(type.Name) + ".asset") : attr.fileName; if (!System.IO.Path.HasExtension(fileName)) { fileName = fileName + ".asset"; } var item = new MonoCreateAssetItem { menuItem = menuItemName, fileName = fileName, order = attr.order, type = type }; result.Add(item); } return(result.ToArray()); }