Unity里能创建 c#脚本模板,但是如果我想创建Lua脚本模板怎么办呢?拓展一下编辑器吧。

设置一下Lua脚本的模板地址 :  Assets/Editor/Lua/Template/lua.lua

using UnityEngine;

using UnityEditor;

using System;

using System.IO;

using System.Text;

using UnityEditor.ProjectWindowCallback;

using System.Text.RegularExpressions;

 

public class Test

{

    [MenuItem("Assets/Create/Lua Script", false, 80)]

    public static void CreatNewLua()

    {

        ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,

        ScriptableObject.CreateInstance<MyDoCreateScriptAsset>(),

        GetSelectedPathOrFallback() + "/New Lua.lua",

        null,

       "Assets/Editor/Lua/Template/lua.lua");

    }

 

 

 

    public static string GetSelectedPathOrFallback()

    {

        string path = "Assets";

        foreach (UnityEngine.Object obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets))

        {

            path = AssetDatabase.GetAssetPath(obj);

            if (!string.IsNullOrEmpty(path) && File.Exists(path))

            {

                path = Path.GetDirectoryName(path);

                break;

            }

        }

        return path;

    }

}    

 

 

class MyDoCreateScriptAsset : EndNameEditAction

{

 

 

    public override void Action(int instanceId, string pathName, string resourceFile)

    {

        UnityEngine.Object o = CreateScriptAssetFromTemplate(pathName, resourceFile);

        ProjectWindowUtil.ShowCreatedAsset(o);

    }

 

    internal static UnityEngine.Object CreateScriptAssetFromTemplate(string pathName, string resourceFile)

    {

        string fullPath = Path.GetFullPath(pathName);

        StreamReader streamReader = new StreamReader(resourceFile);

        string text = streamReader.ReadToEnd();

        streamReader.Close();

        string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(pathName);

        text = Regex.Replace(text, "#NAME#", fileNameWithoutExtension);

        //string text2 = Regex.Replace(fileNameWithoutExtension, " ", string.Empty);

        //text = Regex.Replace(text, "#SCRIPTNAME#", text2);

        //if (char.IsUpper(text2, 0))

        //{

        //    text2 = char.ToLower(text2[0]) + text2.Substring(1);

        //    text = Regex.Replace(text, "#SCRIPTNAME_LOWER#", text2);

        //}

        //else

        //{

        //    text2 = "my" + char.ToUpper(text2[0]) + text2.Substring(1);

        //    text = Regex.Replace(text, "#SCRIPTNAME_LOWER#", text2);

        //}

        bool encoderShouldEmitUTF8Identifier = true;

        bool throwOnInvalidBytes = false;

        UTF8Encoding encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier, throwOnInvalidBytes);

        bool append = false;

        StreamWriter streamWriter = new StreamWriter(fullPath, append, encoding);

        streamWriter.Write(text);

        streamWriter.Close();

        AssetDatabase.ImportAsset(pathName);

        return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));

    }

 

}    

因为是模板就可以添加一些预制代码在上面, 当填写完类名后可以来替换操作,  例如unity自带的 创建C#文件, 外面写了类名里面也跟这变。Creat -> Lua Script

Unity3D研究院编辑器之创建Lua脚本模板_Unity3D研究院编辑器之创建Lua脚

 

然后可以输入Lua脚本的类名。

Unity3D研究院编辑器之创建Lua脚本模板_Unity3D研究院编辑器之创建Lua脚_02

 

然后就根据自己创建Lua的文件名 正则替换模板里的东西了。

Unity3D研究院编辑器之创建Lua脚本模板_Unity3D研究院编辑器之创建Lua脚_03