2013-02-25 76 views
3

我必须管理我的RAM,以便随时加载/卸载所有ngui页面。对于我创建AssetBundle用预制件,我会保持这些AssetBundles在我的apk动态加载/卸载资产

什么是加载/卸载它们的Adroid设备上的方式。

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

我想以正确的方式还是失去了一些东西。

任何帮助/?

回答

2

我想你是对的。 Unity支持项目中的资源文件夹,以允许在主游戏文件中提供内容,但在请求之前不会被加载。在Unity Pro,统一的iOS临(以前称为 'iOS高级指南')和Unity Android的临(以前称为 'Android高级指南'),你还可以创建资产包。这些文件与主游戏文件完全分离,其中包含游戏需要从文件或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的全文。

+0

感谢Joetjah您的快速和简单地回应 BDW可我把我的APK里面AssetBudles? 如果是这样,我怎么能加载它们? 我知道从Web服务器加载它们的方式,但与应用程序加载相混淆 – 2013-02-25 11:28:20

+0

安装APK时,可以安装所有类型的捆绑包。这并不意味着每个场景都会加载这些软件包。因此,它可以节省RAM,因为在不需要时不会访问捆绑包。 – Joetjah 2013-02-25 11:34:33

+0

这意味着我必须明确加载所有资产到设备的权利? 但是如果应用上传到商店怎么办? 对不起,如果这些q似乎很傻,但我是一个新手,真的陷入了这个 – 2013-02-25 11:38:52