美文网首页更好的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宏定义

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

  • swift&&OC

    宏定义 OC中的宏定义 swift中的宏定义 OC中宏定义的方式,在swift中是不可用的,在swift中,宏定义...

  • Swift 声明宏定义

    在iOS开发中,使用Object-C可以定义一些宏,以方便项目中调用,但是Swift语言中,并不支持宏定义,我们可...

  • 魔兽世界插件编程解析(二)

    除了官方支持的元数据之外,在自定义插件的.toc文件中还可能包含许多其他的标记。TOC文件可以列出每个Lua文件(...

  • 判断ARC MRC - iOS

    在PCH中宏定义

  • c高级自我学习(1)

    1 编译预处理和宏定 #undef指令删除前面定义的宏定义。 无参宏定义:宏名中没有参数。 1,宏定义中宏名用来表...

  • 精解C语言预处理命令(三)之“宏”的用法二

    关于C语言带参数的宏定义中的参数 C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实...

  • Unity 分平台

    UNITY_EDITOR 用于执行UnityEditor模式下的脚本的定义.UNITY_STANDALON...

  • Lua与C#的交互实现

    lua与C#交互使用LuaInterface实现定义变量:1,Lua lua = new Lua() --定义一个...

  • Lua 数据类型

    Lua是动态类型语言,变量不要类型定义,只需要为变量赋值。 值可以存储在变量中,作为参数传递或结果返回。 Lua中...

网友评论

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

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