當前專案使用C#開發版本,IOS使用Xlua熱更代碼,每次創建Xlua檔案的時候,都是復制之前的Lua檔案修改檔案名、類名,模板內容基本一致,覺得有一點麻煩,
以前寫過一篇文章:修改Unity、VS2015創建C#腳本時使用的模板,就想仿照著Unity創建C#腳本時的方法寫一個創建Lua腳本的編輯器擴展,
首先根據需求,創建一個Txt模板:100-Lua Script-NewLua.lua.txt
local #SCRIPTNAME#Class = DeclareClass("#SCRIPTNAME#Class")
function #SCRIPTNAME#Class:HotFix()
xlua.private_accessible(CS.#SCRIPTNAME#)
xluaUtil.hotfix_ex(CS.#SCRIPTNAME#, "XXXXX", self.XXXXX)
LogE("hotfix #SCRIPTNAME#Class")
end
function #SCRIPTNAME#Class.XXXXX(this, args)
this:XXXXX(args)
end
function #SCRIPTNAME#Class:Destory()
xlua.hotfix(CS.#SCRIPTNAME#, "XXXXX", nil)
end
添加編輯器代碼,呼叫ProjectWindowUtil.StartNameEditingIfProjectWindowExists函式創建檔案時編輯檔案名稱,
[MenuItem("Assets/Create/Xlua Script",false,101)]
static void CreatXluaHotfixField()
{
string _path = "Assets/XLua/Editor/100-Lua Script-NewLua.lua.txt";//模板路徑
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
ScriptableObject.CreateInstance<CraetLuaScriptAsset>(),
GetSelectedPath(),
null,
_path
);
AssetDatabase.Refresh();
}
private static string GetSelectedPath()
{
UnityEngine.Object[] obj = Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.TopLevel);
string path = AssetDatabase.GetAssetPath(obj[0]) + "/New Lua.txt";
return path;
}
創建CraetLuaScriptAsset類,繼承EndNameEditAction 重寫Action,
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEditor.ProjectWindowCallback;
using UnityEngine;
class CraetLuaScriptAsset : EndNameEditAction
{
public override void Action(int instanceId, string pathName, string resourceFile)
{
UnityEngine.Object o = CreatScriptAssetFormTemplate(pathName, resourceFile);
ProjectWindowUtil.ShowCreatedAsset(o);
}
internal static UnityEngine.Object CreatScriptAssetFormTemplate(string pathName, string resourcesFile)
{
string _fileName = Path.GetFileNameWithoutExtension(pathName);
pathName = pathName.Replace(_fileName, _fileName + ".lua");
string fullName = Path.GetFullPath(pathName);
//讀取模板
StreamReader streamReader = new StreamReader(resourcesFile);
string text = streamReader.ReadToEnd();
streamReader.Close();
//修改內容
text = Regex.Replace(text, "#SCRIPTNAME#", _fileName);
//寫檔案
StreamWriter streamWriter = new StreamWriter(fullName);
streamWriter.Write(text);
streamWriter.Close();
AssetDatabase.ImportAsset(pathName);
return AssetDatabase.LoadAssetAtPath(pathName, typeof(UnityEngine.Object));
}
}
在CreatScriptAssetFormTemplate函式中會讀取模板內容,按需求修改內容,最后再寫入對應路徑,這樣,就能像創建C#代碼一樣創建自定義的Lua代碼了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/291226.html
標籤:其他
上一篇:【Android 事件分發】MotionEvent.ACTION_DOWN 按下事件分發流程( Activity | ViewGroup | View )
