protected override void CreateNewAsset(List <AssetInfo> assetInfoList) { // Create a list of all urgency function types, excluding abstract types and // types that have wrappers: var list = new List <System.Type>(); var assemblies = RuntimeTypeUtility.GetAssemblies(); foreach (var assembly in assemblies) { try { var assemblyList = (from assemblyType in assembly.GetExportedTypes() where typeof(UrgencyFunction).IsAssignableFrom(assemblyType) select assemblyType).ToArray(); list.AddRange(assemblyList); } catch (System.Exception) { // Ignore exceptions and move on to next assembly. } } var menu = new GenericMenu(); for (int i = 0; i < list.Count; i++) { var type = list[i]; if (type == null) { continue; } if (type.IsAbstract) { continue; } if (QuestEditorUtility.HasWrapperType(type)) { continue; } menu.AddItem(new GUIContent(type.Name), false, OnClickNewUrgencyFunction, type); } menu.ShowAsContext(); }