动态加载/卸载资产

时间:2013-02-25 11:13:36

标签: unity3d ngui

我必须管理我的RAM,所以想要动态加载/卸载我所有的ngui页面。为此我已经创建了带有预制件的AssetBundle,我将这些AssetBundle保存在我的apk中

在adroid设备上加载/卸载它们的方法是什么。

我大致了解AssetBundle.CreateFromMemory,但无法实现它

我正在以正确的方式思考或遗漏某些事情。

任何帮助/ ??

1 个答案:

答案 0 :(得分:2)

我认为你的方式正确。 Unity支持项目中的资源文件夹,允许在主游戏文件中提供内容,但在请求之前不会加载。在Unity Pro,Unity iOS Pro(以前称为“iOS Advanced”)和Unity Android Pro(以前称为“Android Advanced”)中,您还可以创建资产包。这些文件与主游戏文件完全分开,主游戏文件包含游戏根据需要从文件或URL访问的资产。

Asset Bundle是外部资产集合。您可以拥有许多资产包,因此可以拥有许多不同的外部资产集合。这些文件存在于构建的Unity播放器之外,通常位于Web服务器上,供最终用户动态访问。

要构建资产包,请从编辑器脚本中调用BuildPipeline.BuildAssetBundle()。在参数中,您指定要包含在构建文件中的对象数组以及其他一些选项。这将构建一个文件,以后可以使用AssetBundle.Load()在运行时动态加载。

您可以通过调用AssetBundle.Unload()来卸载AssetBundle的资源。如果为unloadAllLoadedObjects参数传递true,则AssetBundle内部保留的对象和使用AssetBundle.Load()从AssetBundle加载的对象都将被销毁,并且捆绑包使用的内存将被释放。

有时您可能更喜欢加载AssetBundle,实例化所需的对象并释放包中使用的内存,同时保持对象周围。好处是可以为其他任务释放内存,例如加载另一个AssetBundle。在这种情况下,您将传递false作为参数。捆绑销毁后,您将无法再从中加载对象。

如果要在加载另一个级别之前销毁使用Resources.Load()加载的场景对象,请在其上调用Object.Destroy()。要发布资产,请使用Resources.UnloadUnusedAssets()

阅读Unity docs中的整个故事。