如何使用蓝图删除对象(不是演员)

问题描述 投票:0回答:2

好的,我已经创建了一些继承自 UObject 的类。我可以在 BP 关卡中创建它(使用构造对象节点)并将引用存储在我的 BP 变量中。当我创建对象时,我将 Outer 设置为 self。因此,BP 拥有新创建的对象。现在我的问题是如何从内存中删除这个对象?我尝试将 BP 变量设置为 null,但似乎我需要销毁级别才能释放该对象。知道如何在不破坏关卡的情况下做到这一点吗?

unreal-engine4 unreal-blueprint
2个回答
0
投票

我目前无法访问 UE4,但我希望这可以帮助/提示您正确的方向:

UObject 由垃圾收集器管理。要正确创建 UObject,请使用 NewObject()、NewNamedObject() 和 ConstructObject()。可以使用对象标志枚举来配置垃圾收集器在创建时处理 UObject 的方式。 (如果你想了解更多关于UObject实例创建的知识,可以去这里: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”,它会起作用。


0
投票

我设法解决了这个问题,我还在虚幻答案中心上得到了一些线索:https://answers.unrealengine.com/questions/337525/how-to-delete-object-using-blueprints.html

所以基本上答案是:将引用变量设置为null,并且在某个时刻GC将释放它。但不要指望立即得到这个。

© www.soinside.com 2019 - 2024. All rights reserved.