使用UnityEditor生成Lua脚本

第一步-编写Editor窗口

using UnityEngine;
using UnityEditor;

public class CreateLuaEditorWindow : EditorWindow
{
    string writerName = "";
    string className = "";
    Object FileObject;

    //利用构造函数来设置窗口名称
    CreateLuaEditorWindow()
    {
        this.titleContent = new GUIContent("Create Lua");
    }

    //添加菜单栏用于打开窗口
    [MenuItem("Create/Create Lua")]
    static void showWindow()
    {
        EditorWindow.GetWindow(typeof(CreateLuaEditorWindow));
    }
    void OnGUI()
    {
        GUILayout.BeginVertical();

        //绘制标题
        GUILayout.Space(10);
        GUI.skin.label.fontSize = 24;
        GUI.skin.label.alignment = TextAnchor.MiddleCenter;
        GUILayout.Label("Create Lua");

        //绘制当前时间
        GUILayout.Space(10);
        GUI.skin.label.fontSize = 20;
        GUILayout.Label("Time:" + System.DateTime.Now);

        //绘制文本-编写者
        GUILayout.Space(10);
        writerName = EditorGUILayout.TextField("WriterName", writerName);
        //绘制文本-脚本名
        GUILayout.Space(10);
        className = EditorGUILayout.TextField("ClassName", className);


        //绘制文件夹
        GUILayout.Space(10);
        FileObject = EditorGUILayout.ObjectField("FileObject", FileObject, typeof(Object), true);

        string path = AssetDatabase.GetAssetPath(FileObject);
        GUI.skin.label.fontSize = 17;
        GUI.skin.label.alignment = TextAnchor.LowerLeft;
        GUILayout.Label(path);

        EditorGUILayout.Space();

        //添加名为"Creat Lua"按钮,用于调用SaveBug()函数
        if (GUILayout.Button("Creat NewLua"))
        {
            string time = System.DateTime.Now.ToString();

            CreateLua.CreatNewLua(writerName, time, className, path);
        }

        GUILayout.EndVertical();
    }
}

第二步-编写Editor按钮方法(生成对应的代码)

using UnityEditor;
using System.IO;
using System.Text;

/// 
/// 生成Lua代码
/// 
public static class CreateLua
{
    public static void CreatNewLua(string writerName,string time,string className,string luaPath)
    {
        StringBuilder sb = new StringBuilder();

        sb.Append($"---\n");
        sb.Append($"---Author: {writerName}\n");
        sb.Append($"---Date: {time}\n");
        sb.Append($"---\n");
        sb.Append("\n");

        sb.Append($"{className} = {className} or\n");
        sb.Append("{\n");
        sb.Append("}\n");

        SaveFile(sb, className, "lua", luaPath);
    }

    private static void SaveFile(StringBuilder sb, string flieName, string fileType,string luaPath)
    {
        string codeFullPath = $"{luaPath}/{flieName}.{fileType}";

        File.WriteAllText(codeFullPath, sb.ToString());

        AssetDatabase.Refresh();
        EditorUtility.DisplayDialog("提示", "生成成功", "确定");
    }
}
注:

[1]在StringBuilder 中$属于转义字符,需要加{},具体用法见代码。
[2]在C#代码中"“中不可再继续添加”",而在Lua中,"和’用法一致,所以在代码中使用了’进行字符串标注。

工程中的效果

使用UnityEditor生成Lua脚本_第1张图片
FileObject是将想要生成到的文件夹拖入即可。

你可能感兴趣的:(Unity)