有時我們需要在lua代碼中也寫出C#那樣的依據(jù)平臺的代碼。比如判斷是否是在EDITOR模式下面钝凶。C#很好寫:
#if UNITY_EDITOR
#endif
lua卻沒有宏定義的支持次询。
要實現(xiàn)這種效果可以從lua代碼的加載入手峰鄙,xlua代碼的加載過程是可以自定義的栖袋,可以先把代碼寫成這樣的:
if?rsp.Status?==?OrderStatus.ToDeliver?--[[#if?UNITY_EDITOR?or?rsp.Status?==?OrderStatus.NeedPay#endif]]?then
這段附加lua代碼整體被注釋了叹卷,如果不處理(在平臺發(fā)布時就不會處理)不會對邏輯產(chǎn)生任何影響舒岸。接下來修改lua加載代碼
public static byte[] EditorLoadLuaFile(ref string filepath)
{
filepath = Application.dataPath + "/Res/Lua/" + filepath.Replace('.', '/') + ".lua.txt";
var lua = File.Exists(filepath) ? File.ReadAllText(filepath) : "";
lua = System.Text.RegularExpressions.Regex.Replace(lua, "--\\[\\[#if UNITY_EDITOR(.*?)#endif\\]\\]", "$1", System.Text.RegularExpressions.RegexOptions.Singleline);
return Encoding.UTF8.GetBytes(lua);
}
// 一些說明:\\[是為了轉(zhuǎn)義正則表達(dá)式的元符號[绅作。System.Text.RegularExpressions.RegexOptions.Singleline是為了讓元符號.能匹配換行符,寫在多行也能匹配蛾派。
上面這個加載函數(shù)僅用在設(shè)置了UNITY_EDITOR時俄认。核心邏輯就是把--[[#if?UNITY_EDITOR #endif]]擦除。那一行代碼就變?yōu)?/p>
if?rsp.Status?==?OrderStatus.ToDeliver or?rsp.Status?==?OrderStatus.NeedPay then了洪乍。
依此邏輯也就可以實現(xiàn) #if UNITY_ANDROID等等的了眯杏。需要特別說明的是盡量不要用正則表達(dá)式而要用字符串查找替換,因為能提高執(zhí)行效率壳澳。