sluaunreal icon indicating copy to clipboard operation
sluaunreal copied to clipboard

1.x里的CallLuaMember函数在2.x里没有了,是要自己手动添加么?

Open scriptkitz opened this issue 1 year ago • 6 comments

1.x里的CallLuaMember函数在2.x里没有了。

升级2.x后,ALuaPawn,ALuaCharacter没了。

由于老项目用的1.x,很多蓝图继承自ALuaPawn,ALuaCharacter, 升级2.x导致这些蓝图都打不开了,只好修改slua的源码,加回了这2个类。

升级2.x,由于1.x的蓝图资源太多都调用了CallLuaMember,蓝图有没有批量替换功能, 所以只能自己手动修改slua的源码,把CallLuaMember函数也加回。

这才让老项目的蓝图资源能正常打开。。

所i有升级1.x到2.x必须要手动修改slua的源代码。。这种方式不太友好啊。

scriptkitz avatar Aug 09 '23 10:08 scriptkitz

而且也不能通过只修改自己项目源码达到目的, 因为老的蓝图引用的 slua_unreal.LuaPawn这种路径,所以只能修改 插件slua的源码。

scriptkitz avatar Aug 09 '23 11:08 scriptkitz

如果是蓝图API,得重新给加回来,如果是C++代码的话使用CallLuaFunction : "RET CallLuaFunction(const FString& FunctionName, ARGS&& ...Args)" 它传多参数时使用上更加友好。

zjhongxian avatar Aug 10 '23 07:08 zjhongxian

“蓝图资源太多都调用了CallLuaMember” 这种我们一般安排人员把它用Lua重写来达到更好的可维护状态,建议项目组开发一个“蓝图转Lua”工具批量去做。

我们项目里面有同学做了类似工具,是基于蓝图节点去做的,可用,但是也要人工修复下。

我个人的看法是做个基于字节码的 蓝图 =》lua 转换工具,应该是可以做到即转即用的

zjhongxian avatar Aug 10 '23 07:08 zjhongxian

如果是蓝图API,得重新给加回来,如果是C++代码的话使用CallLuaFunction : "RET CallLuaFunction(const FString& FunctionName, ARGS&& ...Args)" 它传多参数时使用上更加友好。

我最开始也是准备调用CallLuaFunction ,但如果用CallLuaFunction<FLuaBPvar>(...), 这样的话不行, 编译报错DeduceType<X>::value未定义,如果用一般类型比如CallLuaFunction<int>(...)就可以, 但这里必须用FLuaBPvar类型才能给蓝图调用,可能要用宏DefDeduceType添加个类型?不确定啊。。

最后先调用了return ULuaBlueprintLibrary::CallToLuaWithArgs(this, FunctionName, Args, TEXT(""));, 还不知道有没问题,反正编译过了。。。

scriptkitz avatar Aug 10 '23 08:08 scriptkitz

“蓝图资源太多都调用了CallLuaMember” 这种我们一般安排人员把它用Lua重写来达到更好的可维护状态,建议项目组开发一个“蓝图转Lua”工具批量去做。

我们项目里面有同学做了类似工具,是基于蓝图节点去做的,可用,但是也要人工修复下。

我个人的看法是做个基于字节码的 蓝图 =》lua 转换工具,应该是可以做到即转即用的

这也太麻烦了, 我直接修改slua源码,加回原来的名字更快捷😄

scriptkitz avatar Aug 10 '23 08:08 scriptkitz

嗯,这样兼容过渡也是一种方式,工具开发需要不少时间

zjhongxian avatar Aug 11 '23 01:08 zjhongxian