我从来没有总结过Unity的资源管理,我在看所有的文档。 今天,有人问我总结一下,加深对Unity资源管理的理解。 主要参考了Unity官方文档的资源和资产绑定。
Unity提供了两种动态资源加载方法: Resources.Load和AssetBundle。 Resources.Load用于加载输入游戏软件包内Resources目录的资源,AssetBundle用于加载软件包外自己打的资源软件包,build pipelile 结合API进行具体说明。
加载:
resources.load :用于加载app包中的资源/目录的asset;
resources.load async:resources.load的异步方法;
resources.load all :与resources.load类似,但用于加载目录中的所有asset;
resources.loadassetatpath :加载asset /目录中的资源。 仅在编辑器模式下可用。 有时在编写打包工具时使用。
------------- -请参阅
AssetBundle.CreateFromFile :从磁盘加载AssetBundle。 这是加载资产绑定的最快方法。 只能加载未压缩的资产绑定。 Unity 5.x将更改为加载文件,可以加载已压缩文件;
AssetBundle.CreateFromMemory :从内存中创建AssetBundle,异步方法。 将Unity 5.x称为LoadFromMemoryAsync;
asset bundle.createfrommemoryimmediate:asset bundle.createfrommemory的同步方法。 将Unity 5.x更改为LoadFromMemory;
WWW.LoadFromCacheOrDownload :从缓存或网络下载后,加载AssetBundle,无需担心设备空间不足;
asset bundle.load asset :从asset bundle加载asset;
asset bundle.loadassetasync:asset bundle.load asset的异步方法;
asset bundle.loadallassets :加载在asset bundle中指定的所有类型的asset;
asset bundle.loadallassetsasync:asset bundle.loadallassets的异步方法;
卸载:
resources.unload asset (objectassettounload ) :卸载指定的asset。 只能用于从磁盘加载的内容。 如果场景中存在对此asset的引用,Unity将自动重新加载。
Resources.UnloadUnusedAssets :卸载所有未引用的资产。 可以在画面切换时调用,也可以通过定时调用释放全局未使用资源。
------------- -请参阅
AssetBundle.unload(false ):assetbundle的压缩文件数据)文件内存映像);
AssetBundle.unload(true ) :卸载assetbundle文件内存映像并释放所有加载的asset; 如果在场景中引用了asset,则会丢失;
------------- -请参阅
object.destroy :放弃game object、组件或asset; 在更新周期之后、渲染之前,而不是立即丢弃;
Object.DontDestroyOnLoad :表示在场景切换时不丢弃对象;
GC.Collect :强制垃圾收集器可以立即回收内存,并在需要时使用。 例如,切换画面调用或定时调用;
通过查看Unity中这些API的描述,您现在可以清楚地了解Unity的动态资源管理。 下图更清晰。