首页 > 代码库 > 《转》Unity3D研究院编辑器之创建Lua脚本模板

《转》Unity3D研究院编辑器之创建Lua脚本模板

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

技术分享

 

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

技术分享

 

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

技术分享

 

  • 本文固定链接: http://www.xuanyusong.com/archives/3732

《转》Unity3D研究院编辑器之创建Lua脚本模板