public void WriteScript(Menu menu, string namespaceName, string className, ClassQualifiers classQualifiers, string scriptPath, int menuPriority) { m_UsedNames = new HashSet <string>(); MemoryStream memStream = BuildScript(menu, namespaceName, className, classQualifiers, menuPriority); string fullScriptPath = Path.Combine(Application.dataPath, scriptPath); EditorApplication.LockReloadAssemblies(); try { try { using (FileStream fileStream = new FileStream(fullScriptPath, FileMode.Create, FileAccess.Write)) { memStream.WriteTo(fileStream); fileStream.Close(); } } catch (Exception e) { Debug.LogError(e); throw; } } finally { EditorApplication.UnlockReloadAssemblies(); } AssetDatabase.ImportAsset("Assets/Scripts/Util/Editor/ScenesMenu.cs"); }
private MemoryStream BuildScript(Menu scenesMenu, string namespaceName, string className, ClassQualifiers classQualifiers, int menuPriority) { MemoryStream memStream = new MemoryStream(); StreamWriter streamWriter = new StreamWriter(memStream, Encoding.UTF8); IndentedTextWriter indentWriter = new IndentedTextWriter(streamWriter); streamWriter.NewLine = "\n"; indentWriter.NewLine = "\n"; indentWriter.WriteLine("using UnityEngine;"); indentWriter.WriteLine("using UnityEditor;"); indentWriter.WriteLine(); bool isPartial = (classQualifiers & ClassQualifiers.Partial) != 0; bool isStatic = (classQualifiers & ClassQualifiers.Static) != 0; bool usingNameSpace = !string.IsNullOrEmpty(namespaceName); if (usingNameSpace) { indentWriter.WriteLine("namespace {0} {{", namespaceName); indentWriter.Indent++; } indentWriter.WriteLine("public {1}{2}class {0} {{", className, isStatic ? "static " : "", isPartial ? "partial " : ""); indentWriter.Indent++; WritePrefix(indentWriter); int priority = menuPriority + 12; // start at higher priority so that we get a separator after the Rebuild options. WriteMenu(indentWriter, scenesMenu, "", "", priority); WritePostfix(indentWriter); indentWriter.Indent--; indentWriter.WriteLine("}"); if (usingNameSpace) { indentWriter.Indent--; indentWriter.WriteLine("}"); } indentWriter.Flush(); streamWriter.Flush(); memStream.Flush(); return(memStream); }