U3D游戏运行时资源是如何从AB中加载出来的

时间:2023-12-19 21:38:20

以安卓为例

1,游戏启动,自定义版本管理器去安卓的持久化目录下查找我们自定久的版本管理文件 rep.db,若该文件不存在,说明这是游戏第一次启动,于是就把streammingAssets下的LUA文件夹和resoure文件夹及rep.db及版本号文件version.txt及资源列表文件resource_list.txt拷到持久化目录下。

若发现rep.db存在,则去WEB资源服务器上取资源版本号,并与version.txt中的版本号对比,如不一致,则去对比服务器与本地的resource_list.txt(每个文件对应一个MD5),少的删除,多的增加,将资源从WEB服务器上拉到持久化目录,并重新写一个rep.db,记录了LUA文件,资源文件的相对-绝对路径映射,相对路径就是资源打包时指定的资源名称,比如打一个资源包 assets/res/pictures,下面有一组图片,分别命名为 assets/res/pictures/grass.png,assets/res/pictures/stone.png等,并将资源名与资源包的对应关系写到一个配置文件 asset_2_bundle.txt中,以便加载时使用。

资源打包时,对AB包内的资源名称并没有什么限制条件,既可以使用带路径的名称,也可使用一个简单名称,但在游戏中,因为资源很多,为防止资源重名,我们要使用带路径资源名。

2,资源更新完毕,游戏运行,当需要加载" assets/res/pictures/grass.png"这张图片时,根据这个路径名去 asset_2_bundle.txt中去查找对应的AB包名,然后再根据AB包名去rep.db中查找AB包在安卓上的绝对路径名(持久化目录下),然后createBundleFromefile创建这个AB包,并缓存它。然后用AB.LOADASSET("assets/res/pictures/grass.png")加载资源,

因为assets/res/pictures/grass.png这个资源名是我们在打AB包时指定的,因此AB可以找到它