-
Notifications
You must be signed in to change notification settings - Fork 691
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
对于BlueprintGeneratedClass,会被UE GC,但如果这个类在被UE标记之后还没有真正GC时,该类的新的UClass被创建出来,然后创建了新的UObject,会导致新创建的UObject绑定时使用了已有的metatable,从而导致Lua中访问UObject成员时会取到老的property智能指针,从而提示invalid property。
解决办法是在FClassRegistry::PushMetatable中判断ClassDesc中Class的有效性,当无效时Unregister清理掉注册表中失效的metatable,继续执行创建新的metatable。以此保证UObject创建时能拿到有效的metatable。
bool FClassRegistry::PushMetatable(lua_State* L, const char* MetatableName)
{
int Type = luaL_getmetatable(L, MetatableName);
if (Type == LUA_TTABLE)
{
FClassDesc* Ret = Find(MetatableName);
if (Ret && Ret->IsClass() && !Ret->IsStructValid())
{
// unregister invalid metatable
Unregister(Ret);
}
else
{
return true;
}
}
//...
}
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working