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
{// 输入Lua文件名后的操作,写入lua文件,并替换文件名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);//}// 写入lua脚本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); // 导入Unity,此处的路径必须是资源路径,从Assets开始。return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object)); // 加载}}
因为是模板就可以添加一些预制代码在上面, 当填写完类名后可以来替换操作, 例如unity自带的 创建C#文件, 外面写了类名里面也跟这变。Creat -> Lua Script
然后可以输入Lua脚本的类名。
然后就根据自己创建Lua的文件名 正则替换模板里的东西了。
- 本文固定链接: Unity3D研究院编辑器之创建Lua脚本模板(十六) | 雨松MOMO程序研究院
- 转载请注明: 雨松MOMO 2015年11月04日 于 雨松MOMO程序研究院 发表