好的我已经创建了一些继承自UObject的类。我可以在级别BP中创建它(使用Construct对象节点)并在我的BP变量中存储引用。当我创建对象时,我将Outer设置为self。所以BP级拥有新创建的对象。现在我的问题是如何从内存中删除这个对象?我试图将BP变量设置为null但似乎我需要销毁级别才能释放此对象。知道怎么做而不破坏水平吗?
答案 0 :(得分:0)
此刻我无法访问UE4,但我希望这可以帮助/提示您找到正确的方向:
UObjects由垃圾收集器管理。要适当地创建UObject,请使用NewObject(),NewNamedObject()和ConstructObject()。在使用Object Flags枚举创建时,可以配置垃圾收集器处理UObject的方式。 (如果您想了解有关UObject实例创建的更多信息,请访问:hhttps://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Creation/index.html)
这样,您不应该在UObject上调用new或delete。如果不再需要UObject,通常意味着没有对它的引用(这可能会有所不同,具体取决于创建UObject时使用的上下文和垃圾收集标志)。在这种情况下,您可以运行ForceGarbageCollection()函数:
GetWorld() - > ForceGarbageCollection(真);
请注意,调用此方法可能会在某些情况下导致崩溃,尤其是当对象已被垃圾收集器销毁或值为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'从我破碎的链接,它将工作。
答案 1 :(得分:0)
我设法解决了这个问题,我还得到了一些关于虚幻答案中心的线索:https://answers.unrealengine.com/questions/337525/how-to-delete-object-using-blueprints.html
所以基本上答案是:将引用变量设置为null,并且在某些时刻GC将释放它。但是不要期望立刻得到这个。