xlua生成wrap遗漏配置

遇到的问题

在Unity2017.4中使用IL2CPP脚本后台。有些GetComponent(typeof(SpriteMask))提示GetComponent的参数是无效的。以前用Mono脚本后台是没问题的

在xlua中[LuaCallCSharp]对应的是需要暴露给Lua的类和代理/事件等。如果没有配置,xlua就只能用反射来实现,还会遇到如上问题。如上就是因为没有为SpriteMask配置LuaCallCSharp。

这时还有个问题。如何确定项目中还有别的这样的遗漏配置呢?

我们需要处理的是UnityEngine namespace内部的那些遗漏。

项目中的代码是如下这样的:

local SpriteMask = CS.UnityEngine.SpriteMask

通过Linux/Mac的shell找到所有的使用

grep -r "local\s*[a-zA-Z0-9]\+\s*=\s*CS\.UnityEngine\.[a-zA-Z0-9.]\+" ./ > local.txt

cat local.txt | grep -o "[^.]\+$" | grep -o "[a-zA-Z0-9]\+" | sort | uniq > luacallcsharp.txt

这样就提取出所有的lua中使用的UnityEngine下面的类名(也会包括某些namespace名字)

然后查找

现有的配置

可以把typeof这一段拷贝出来成一个文件:src.txt

cat src.txt | grep -o "(\s*.\+\s*)" | grep -o "[^()]\+" | grep -o "[a-zA-Z0-9]\+$" > exist_config.txt

// 通过一个集合相减就能求出结果(luacallcsharp.txt - exist_config.txt)

sort -m <(sort luacallcsharp.txt|uniq) <(sort exist_config.txt|uniq) <(sort exist_config.txt|uniq) | uniq -u

need_config.txt中就是需要添加配置的(namespace并没有排除,需要人工手动来)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容