From 81a7d6b6e9f51507fac635e356a6be0a7ebd6c69 Mon Sep 17 00:00:00 2001 From: BaconVN Date: Thu, 8 Aug 2024 16:44:47 +0700 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8E=E7=BB=A7=E6=89=BF?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E7=9A=84=E7=BB=91=E5=AE=9A=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E7=9A=84=E5=B4=A9=E6=BA=83=E5=92=8C=E6=97=A0=E9=99=90=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Source/UnLua/Private/LuaFunction.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Plugins/UnLua/Source/UnLua/Private/LuaFunction.cpp b/Plugins/UnLua/Source/UnLua/Private/LuaFunction.cpp index 100d2398..1c5ecfc2 100644 --- a/Plugins/UnLua/Source/UnLua/Private/LuaFunction.cpp +++ b/Plugins/UnLua/Source/UnLua/Private/LuaFunction.cpp @@ -32,6 +32,18 @@ DEFINE_FUNCTION(ULuaFunction::execCallLua) // PIE 结束时可能已经没有Lua环境了 return; } + + // 如果调用的 ULuaFunction 来自父类,且与对象的 UClass 不是同一个类。 + // 这就是为什么我们跳过调用 Lua 端,而是调用被重写的函数,以防止继承相关的 bugs + if (LuaFunction->GetOverriddenUClass() != Context->GetClass()) + { + const auto Overridden = LuaFunction->GetOverridden(); + if (Overridden) + { + Context->CallFunction(Stack, RESULT_PARAM, Overridden); + } + return; + } Env->GetFunctionRegistry()->Invoke(LuaFunction, Context, Stack, RESULT_PARAM); } @@ -46,6 +58,18 @@ DEFINE_FUNCTION(ULuaFunction::execScriptCallLua) // PIE 结束时可能已经没有Lua环境了 return; } + + // 如果调用的 ULuaFunction 来自父类,且与对象的 UClass 不是同一个类。 + // 这就是为什么我们跳过调用 Lua 端,而是调用被重写的函数,以防止继承相关的 bugs + if (LuaFunction->GetOverriddenUClass() != Context->GetClass()) + { + const auto Overridden = LuaFunction->GetOverridden(); + if (Overridden) + { + Context->CallFunction(Stack, RESULT_PARAM, Overridden); + } + return; + } Env->GetFunctionRegistry()->Invoke(LuaFunction, Context, Stack, RESULT_PARAM); }