释放内存 销毁预制体

4

我正在制作一个分为“剧集”的二维交互式漫画。目前,我正在使用Unity性能分析器进行内存优化。

我的目标是仅加载用户选择查看的剧集到内存中。

为了实现这一点,我正在使用:

GameObject prefab = Resources.Load ("name_prefab") as GameObject; 
GameOject obj = Instantiate (prefab) as GameObject; 

当我删除这一集时,请执行以下命令:
Destroy (obj); 

obj = null; 

Resources.UnloadUnusedAssets (); 

但是我所期望的内存使用量并没有改变。

我做错了什么?

在使用assetBundle的替代方案时,我正在做的事情,但我希望避免它们,因为此时剧集仅在本地存在,然后它似乎像是浪费。

这里有另一个帖子,讲述了相同的问题,但他没有得到答案。


请使用unity3d标签。 - Lex Li
1个回答

1

Resources.UnloadUnusedAssets(); 释放已经超出作用域的资源对象所占用的内存。在您提供的代码片段中,预制件的引用仍然存在。这可能是预制件仍然停留在内存中的主要原因。

即使有标记为“应该被销毁”的对象,这些对象所分配的内存也不会立即被释放。垃圾收集器在后台运行,决定何时清理残留的垃圾。

垃圾回收涉及昂贵的操作,会对性能产生影响。这就是为什么垃圾收集器只偶尔执行其工作的原因。通常,它会在更改场景或内存使用量达到某些阈值时执行其工作。网络上有许多文章可以找到。我相信官方手册可以让您对此主题有一个基本的了解。

Unity指出,更改场景将清除原始场景中的所有内容,除了由DontDestroyOnLoad(targetObject);标记为不可销毁的对象。如果您真的关心内存使用情况,也许可以尝试稍微修改应用程序的结构。因此,每个剧集都保存为场景,而不是预制件。


感谢您的启发!更改场景内存已被释放。 - Giuseppe Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接