美文网首页更好的lua代码
在Lua中支持#if UNITY_EDITOR宏定义

在Lua中支持#if UNITY_EDITOR宏定义

作者: 塘朗山小钻风 | 来源:发表于2021-03-02 17:39 被阅读0次

    有时我们需要在lua代码中也写出C#那样的依据平台的代码。比如判断是否是在EDITOR模式下面。C#很好写:


    #if UNITY_EDITOR

    #endif


    lua却没有宏定义的支持。

    要实现这种效果可以从lua代码的加载入手,xlua代码的加载过程是可以自定义的,可以先把代码写成这样的:

    if rsp.Status == OrderStatus.ToDeliver --[[#if UNITY_EDITOR or rsp.Status == OrderStatus.NeedPay#endif]] then

    这段附加lua代码整体被注释了,如果不处理(在平台发布时就不会处理)不会对逻辑产生任何影响。接下来修改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);

    }

    // 一些说明:\\[是为了转义正则表达式的元符号[。System.Text.RegularExpressions.RegexOptions.Singleline是为了让元符号.能匹配换行符,写在多行也能匹配。


    上面这个加载函数仅用在设置了UNITY_EDITOR时。核心逻辑就是把--[[#if UNITY_EDITOR #endif]]擦除。那一行代码就变为

    if rsp.Status == OrderStatus.ToDeliver or rsp.Status == OrderStatus.NeedPay then了。

    依此逻辑也就可以实现 #if UNITY_ANDROID等等的了。需要特别说明的是尽量不要用正则表达式而要用字符串查找替换,因为能提高执行效率。

    相关文章

      网友评论

        本文标题:在Lua中支持#if UNITY_EDITOR宏定义

        本文链接:https://www.haomeiwen.com/subject/rxjxqltx.html