遇到的问题
在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并没有排除,需要人工手动来)。