Пример #1
0
    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");
    }
Пример #2
0
    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);
    }