Tencent / UnLua

A feature-rich, easy-learning and highly optimized Lua scripting plugin for UE.
Other
2.19k stars 603 forks source link

修复与继承相关的绑定导致的崩溃和无限循环问题 #719

Open BaconVN opened 1 month ago

BaconVN commented 1 month ago

我有 BP_Child 和 BP_Base,它们分别绑定到 Child.lua 和 Base.lua。Child.lua 和 Base.lua 都重写了 FunctionA()。当我在 BP_Child 中调用 FunctionA() 时,它导致了无限循环错误。根本原因是,当执行到 BP_Base 中的 FunctionA 时,由于 Base.lua 重写了 FunctionA(),UnLua 决定再次触发 FunctionA(),这就导致了一个无限循环。你可以看下面的图表来直观理解。

image 我在调用 LuaFunction 时添加了检查,判断调用的 ULuaFunction 是否来自父类,且与对象的 UClass 不是同一个类。这就是为什么我们跳过调用 Lua 端,而是调用被重写的函数,以防止继承相关的 bug。

tencent-adm commented 1 month ago

CLA assistant check
All committers have signed the CLA.