我必须管理我的RAM,所以想要动态加载/卸载我所有的ngui页面。为此我已经创建了带有预制件的AssetBundle,我将这些AssetBundle保存在我的apk中
在adroid设备上加载/卸载它们的方法是什么。
我大致了解AssetBundle.CreateFromMemory,但无法实现它
我正在以正确的方式思考或遗漏某些事情。
任何帮助/ ??
答案 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中的整个故事。