【UnLua】UE4除了在代码中以外,还可以如何定义宏
最近将已有的用UnLua实现的项目更新到UE5,UnLua也更新到UE5。原来的版本是4.26.2。原本正常的项目,运行时爆出很多错误。提示UClass.Load找不到,local actorArray=TArray(AActor)找不到。经过一番排查,原来是没有加UE4.UClass这个前缀。
为什么4.26.2可以,UE5却不行呢?肯定是UnLua插件更新了什么内容。在UnLua.lua中有这样一段代码:

现在出现错误,并且打印出WITH_UE4_NAMESPACE==true,那说明UnLua插件是有设置对应的LuaTable。
检查C++代码发现WITH_UE4_NAMESPACE的宏定义值为0。

为什么Lua全局对象UE4还会生效呢?

这就要说到标题所讲,在UE项目中,还可以怎么定义宏?
打开UnLua.Build.cs可以看到下面这段代码

通过测试,在PublicDefinitions中可以定义新的宏,并且跟C++代码中是否用宏的定义无关。