好的,我创建了一些继承自 UObject 的类。我可以在级别 BP 中创建它(使用构造对象节点)并将引用存储在我的 BP 变量中。当我创建对象时,我将 Outer 设置为 self。所以级别 BP 拥有新创建的对象。现在我的问题是如何从内存中删除这个对象?我试图将 BP 变量设置为 null,但似乎我需要破坏级别才能释放此对象。知道如何在不破坏关卡的情况下做到这一点吗?
2 回答
我目前无法访问 UE4,但我希望这可以帮助/提示您正确的方向:
UObjects 由垃圾收集器管理。要适当地创建 UObject,请使用 NewObject()、NewNamedObject() 和 ConstructObject()。可以使用 Object Flags 枚举来配置 UObject 在创建时由垃圾收集器处理的方式。(如果你想了解更多关于 UObject Instance Creation 的内容,可以去这里:hhttps://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Creation/index.html)
这样,您不应在 UObject 上调用 new 或 delete。如果不再需要 UObject,通常意味着没有对它的引用(但这可能会有所不同,具体取决于创建 UObject 时使用的上下文和垃圾收集标志)。在这种情况下,您可以运行 ForceGarbageCollection() 函数:
GetWorld()->ForceGarbageCollection(true);
请注意,在某些情况下调用此方法可能会导致崩溃,尤其是当对象已被垃圾收集器销毁或值为 null 时。
另外,如果你想了解更多关于虚幻对象处理的知识,你可以去这里:hhttps://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Optimizations/index.html
信用:https ://answers.unrealengine.com/questions/219430/explicitely-delete-a-uobject.html
附言。StackOverflow 不允许我发布两个以上的链接,因为我没有足够的声誉......所以从我损坏的链接中删除第一个“h”,它会起作用。
我设法解决了这个问题,我还在虚幻答案中心得到了一些线索:https ://answers.unrealengine.com/questions/337525/how-to-delete-object-using-blueprints.html
所以基本上答案是:将引用变量设置为null,并且在某个时刻GC会释放它。但不要指望立即拥有它。