Unity资源下载思路

最近一直在弄资源更新这块,前前后后用了一个星期,由于没有这块的经验和本身是一名小白,在做的过程中真的是很痛苦,反复的查找各种资料,看别的帖子总是理解的不是透彻,容易发生思路跑偏,不过最后终于弄出来了,实现的逻辑是参考的github上的 类似项目案例,这个帖子只是为了总结一下资源更新的大体思路

1.资源打包:

更新的资源是打成AssetBundle的(好像没毛病),也就是更新沙盒目录的AssetBundle实现游戏更新,在打包的时候有需要注意的问题,就是生成AssetBundle它会有两个对应的文件,.meta文件和.manifest文件,这块在生成的资源配置表的时候可以去过滤掉,或者直接删除,配置表的生成无非是遍历你输出的AssetBundle文件夹下的所有ab文件,取出每个文件的一些需要的信息,必须包含文件的MD5,文件相对路径,其他信息可以自行添加,MD5是为了对应资源是否发生的改变,文件的相对路径是为了下载时候的URL拼接以及在沙盒中的位置也是这个相对路径

2.资源下载(下载资源哦)

首先资源下载模块把游戏的状态分为两个,一个是第一次安装进游戏,另一个是之前进入过游戏,第一次进入游戏有一个解压资源的过程(其实就是把项目随包体的assetbundle拷贝到沙盒目录,包括扩资源的配置表信息,条件是判断沙盒中有没有资源的配置表),完事之后获取,本地的配置表和服务器的配置表,然后依照服务器的配置表取修改本地的资源(遍历本地的配置表,如果在服务器的配置表中存在,直接从服务器资源集合中删除,不存在的话吧本地的资源删除,然后集合中剩下的就是需要更新的),MD5的使用就在这,看别人的帖子总是说找出差异的资源(通过ab的名字获取MD5值然后进行比较),叫我现在的理解就是把服务器的资源列表的MD5集合与本地的MD5的集合进行比叫,根本不用管什么名字,如果本地的资源MD5在服务器上没有就说明你的这个资源已经不适用了,然后在本地删除

3.资源加载(游戏使用的资源信息提前加载)

这块的话就是在下载完之后的回调函数里面进行ab资源管理的初始化(就是通过总的Manifest文件获取到所有的ab路径信息和依赖信息,还有一个需要做的就是由一个集合去管理加载的AssetBundle,因为有些AssetBundle在内存中加载后不立即释放的,这块往往我们自己封装一个类去存储AssetBundle的状态,通常会有两个字段,一个是AssetBundle一个是int类型的引用)

迷惑的知识点:1.打包后自动生成的Manifest文件,我以前一直以为assetbundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest")是加载的自动的生成manifest文件,其实这个manifest文件在AB包中也会有一份,上面的代码是从AB中加载的,自动生成的Manifest文件对于项目来说没有什么卵用,只是程序需要查看依赖的时候可以看一下,

2.路径问题,配置表中的资源路径是相对路径,不管是在服务器还是在本地,只要相对路径知道,在拼上前面服务器路径或者沙盒路径就可以实现资源的下载或者加载

总结:大致做完了这块,我的第一个感觉就是这哪里是跟新啊,这就是一个文件夹copy的过程,游戏项目中如果StreamingAsset目录有资源,就把资源copy带沙盒目录下,然后打包新版的assetbundle,生成一个新的资源文件夹的结构,把这个放到服务器器,然后客户端照着服务器的新的资源结构和新的资源下载到沙盒,最后最终要的是配置表覆盖老的配置表

猜你喜欢

转载自blog.csdn.net/Er_nameSpace/article/details/81146718