刚刚发现一个nativization编译的一个bug:当原生化蓝图调用一个蓝图函数库中的函数时,如果这个函数返回一个整数,那么打包后的项目所不能得到这个返回值,实际得到的是0。看生成的C++代码发现,这个蓝图函数库函数C++代码如下:
struct FUnconvertedWrapper__UBlueTest_C__pf2222656877 : public FUnconvertedWrapper
{
FUnconvertedWrapper__UBlueTest_C__pf2222656877(const UBlueprintFunctionLibrary* __InObject) : FUnconvertedWrapper(__InObject){}
FORCENOINLINE void bpf__Test3__pf(UObject* bpp____WorldContext__pf, /out/ int32& bpp__count__pf)
{
static const FName __FunctionName(TEXT(“Test3”));
UFunction* __Function = __Object->FindFunctionChecked(FunctionName);
struct bpf__Test3__pf_Parameters
{
UObject* bpp____WorldContext__pf;
int32 bpp__count__pf;
};
bpf__Test3__pf_Parameters __Parameters { bpp____WorldContext__pf, bpp__count__pf };
__Object->ProcessEvent(__Function, &__Parameters);
}
};
bpf__Test3__pf_Parameters结构体里的bpp__count__pf_为传值状态,所以获取不到返回值。
测试发现这个bug在ue4.19和最新的4.21中都存在。
bug重现方法如下:
1.打开ue4.21编辑器,新建蓝图项目ThirdPerson模板并打开该项目。
2.在content下新建”蓝图函数宏库“并打开,新建测试函数Test3,添加返回值int型,并使其返回一个整数值(比如9).保存此函数库。图片1
3.打开ThirdPersonCharacter蓝图,在beginplay中增加调用蓝图库中的函数Test3,并printstring,完成后保存。图片2
4.将项目设置里的蓝图本地化方法改为exclusive,并设置ThirdPersonCharacter蓝图的nativization功能。
5.点击播放按钮,发现游戏运行后打印出值9。
6.打包本项目,运行后发现打印出值0。可见这个bug确实存在。
希望管理员能反馈一下这个bug,并期待能早点解决。