遇到一个 UE 引擎的问题,需要向 Epic 反馈一下

使用官方 Python 插件,像这样调用 参数带有 FEventReply 的函数,

handled = unreal.WidgetLibrary.handled()

unreal.WidgetLibrary.unlock_mouse(handled)

FEventReply UWidgetBlueprintLibrary::UnlockMouse( UPARAM( ref ) FEventReply& Reply )

C++ 收到的这个参数 Reply 仍然是 Unhandled 的,处于一个初始化但是没有赋值的状态。

查了一下,是因为python插件在传递 Struct 参数时,会调用 Identical 对参数的Struct与刚分配好内存初始的Struct进行比较,如果比较相同就不会走到 887 行 CopyScriptStruct 的逻辑,导致参数没有被赋值

[Image Removed]

而 Struct 比较使用的是这个 CompareScriptStruct 函数

[Image Removed]

由于 FEventReply 结构体并没有任何 UPROPERTY,且不支持 STRUCT_IdenticalNative 这个Flag。因此无论如何都会比较为相等。

我使用的是 UE426 的引擎,但查看 UE5.4 和 UE5.6 的代码,相关路径上的代码都没有任何改动,看上去是一个一直存在的问题。

目前我本地的处理方法是给 FEventReply 加上 WithIdenticalViaEquality 及对应的比较函数。但是 FReply 本身是不支持比较的,因此不确定这种处理方式是否存在问题,希望得到官方的修复方法

了解,您说的非常正确。我向总部反馈一下,如果有更新再通知您

我个人觉得您的修改也没什么问题

您好,总部开发认为您的修改也是没有问题的。

不过几乎没有人使用python处理UMG的事务,优先级较低。,您可以先自行修改一下