[Unity]AssetBundle资源管理以及边玩边下解决方案

目录

一、AssetBundle资源管理

二、边玩边下载


一、AssetBundle资源管理

项目资源整理打包

1.在工程内有个专门的文件夹,用于放置需要打进安装包内的UI、预设等资源这个文件夹内的所有资源都要打包。因为这些资源是需要动态加载出来的,所以要首先把.ab放在文件夹内。

2.文件夹夹内的资源所引用的材质、shader等相关引用都放在另一个文件夹内,在打包的时候会整合资源的引用,具体的思路是如果有两个及以上的资源,比如说两个模型引用了同一个材质,则会把这个材质单独提出来一个ab,而如果某一个ab它所引用的资源只有自己在用,那么这些相关的资源则会被打进这个ab本身。

3.解决发现因资源嵌套等导致的资源冗余,重名资源等,循环嵌套等导致的资源卸载不完整,导致的内存泄露,比如我们用了个后处理的插件,这个插件的资源自带在资源目录外,所以要整合。

资源动态加载框架

1.游戏内的资源加载都用统一的调用接口,加载路径都是由配表配出来的,比如说UI,会有一个UIinfo.txt配置数据,比如说一个背包的加载配表ID是101,那我点击主界面按钮的时候,肯定是要调用UImanager的ShowUI方法,

通过一个AssetBundleManger统一的Load接口去加载这个UI预设本身,加载完了之后再根据预设名称本身去加载相关的脚本。

2.加载区分一下平台,在不同编辑环境下记载不同的资源,不同的平台调用不同的加载方法。加载和卸载的用的是两个队列,分时间分批次进行加载,以免一次性加载对CPU的性能影响过高。

2.生名周期根据这个资源的性质来决定,这个要根据特定的时机,比如说UI,打开的时候肯定是常驻的,那么他的销毁时间就是-1,在-1代表不卸载,在CloseUI的时候再进行卸载,卸载的时候要根据他的资源引用,将其所引用的左右资源都卸载掉。不能一瞬间卸载,分帧卸载。

3.资源的预加载就是将那些需要常驻内存的资源提前加载好,比如说选角界面确定好后,就根据这个角色的相关配置信息,将它基本的技能特效,音效,动画等都提前都加载到内存中。根据UWA的意见,我们也将一些常用的资源常驻到内存中。还有创角、主界面的UI等这些都是要提前预加载的。

二、边玩边下载

1.初始小体积安装包所需资源方案拆分

这个事情我一开尝试过去规划前期的资源按目录规划,但是发现由于开发团队人员流动性大,加上除了程序之外其其他人包括美术都很难理解这些东西,所以后来改变思路,就是手动的拆分资源,就是是靠团队去跑游戏,在跑游戏的过程中,记录下所有资源加载过的信息,包括模型、场景、UI等预设,都会调用前期的资源加载统一的接口,生成一份加载过的列表,再根据这份列表信息,去拆分安装包。在打安装包的时候,就是Editor环境下,打完所有资源后,去遍历这个列表,在安装包内留下这份列表的资源以及每个资源的子子孙孙的引用。其他的资源,不在这个列表内的资源,都删除掉。包括包内自带的资源引用信息dep,info都规划好。

2.后台下载游戏后期所需资源

下载的问题考虑:最大的问题是加载文件包体过大,这个就需要做的是,如果玩家所用机型性能良好,考虑下载CDN上进行压缩过的文件,其实就是每个文件都进行到.zip格式的压缩,这样做的好处就是下载时间快,但是弊端就是会对性能造成一些损耗,所以对于低端机型,我们就采取直接下载原有AB的方式,减少这方面的性能损耗。

3.整理包内资源所占比例

这个就是计算规划出前期小安装包内的各类文件的所占比例,用于跟美术讨论取舍问题,先保持基本功能,在进行资源上的优化。

你可能感兴趣的:(unity,游戏引擎)