public static void RemoveMenuItems(PrefabQuickaddDatabase database) { var className = string.Format("GeneratedMenuItems_{0}", database.name.Replace(" ", "")); var script = string.Format("{0}/Scripts/Editor/Generated/{1}.cs", GetRootFolderPath(), className); File.Delete(script); File.Delete(string.Format("{0}.meta", script)); AssetDatabase.Refresh(); }
/// <summary> /// Generate new cs file with MenuItem method for each database entry /// </summary> /// <param name="database"></param> public static void GenerateAddPrefabMenuItems(PrefabQuickaddDatabase database) { var rootFolder = GetRootFolderPath(); Directory.CreateDirectory(string.Format("{0}/Scripts/Editor/Generated", rootFolder)); var className = string.Format("GeneratedMenuItems_{0}", database.name.Replace(" ", "")); var relativeFilePath = string.Format("{0}/PrefabQuickadd/Scripts/Editor/Generated/{1}.cs", GetRelativeToRootPath(), className); var script = string.Format("{0}/Scripts/Editor/Generated/{1}.cs", rootFolder, className); StringBuilder sb = new StringBuilder(); sb.AppendLine("// AUTO-GENERATED CLASS. DO NOT EDIT."); sb.AppendLine("// This is an automatically generated script, any changes made will be overwritten."); sb.AppendLine("using UnityEngine;"); sb.AppendLine("using UnityEditor;"); sb.AppendLine(""); sb.AppendLine("public static class " + className); sb.AppendLine("{"); // Write cs method code that will add the prefab to the scene var items = new List <PrefabQuickaddDatabase.PrefabQuickaddEntry>(database.Items); items.Sort((a, b) => string.Compare(a.Name, b.Name)); for (int i = 0; i < items.Count; i++) { var item = items[i]; if (item.Name == "") { Debug.LogWarning("Missing prefab name at index " + i); continue; } if (item.Prefab == null) { Debug.LogWarning("Missing prefab object for " + item.Name); continue; } var menuName = item.Name; if (database.Submenu != "") { menuName = string.Format("{0}/{1}", database.Submenu, item.Name); } sb.AppendLine(" [MenuItem(\"GameObject/Add Prefab/" + menuName + "\", false, priority = -1)]"); sb.AppendLine(" private static void MenuItem" + i.ToString() + "()"); sb.AppendLine(" {"); sb.AppendLine(" var asset = (GameObject)AssetDatabase.LoadAssetAtPath(\"" + AssetDatabase.GetAssetPath(item.Prefab) + "\", typeof(GameObject));"); sb.AppendLine(" var go = (GameObject)PrefabUtility.InstantiatePrefab(asset);"); sb.AppendLine(" go.transform.SetParent(Selection.activeTransform);"); sb.AppendLine(" go.transform.localPosition = asset.transform.position;"); sb.AppendLine(" Selection.activeGameObject = go;"); sb.AppendLine(" }"); sb.AppendLine(""); } sb.AppendLine("}"); // Remove old file if there is one and reimport script File.Delete(script); File.WriteAllText(script, sb.ToString(), Encoding.UTF8); AssetDatabase.ImportAsset(relativeFilePath); }