您的位置:首页 > 移动开发 > Unity3D

【Unity3D】Bundle打包及加载流程Android篇

2021-08-15 10:54 501 查看

一、生成资源Bundle文件

    生成Bundle文件主要是如何对资源进行设置Bundle名及其分类的过程。目前有两种方式,第一种就是在编辑器里面设置每个资源的Bundle名称(如图1),这是最简单直观的操作方式;另一种方式就是通过编写代码并配合资源配置文件进行控制,先通过代码遍历项目工程的资源然后根据资源配置设置其Bundle名称,也可以暴力的按照资源类型进行分类,由于不同项目的控制方式不同,因此就不过多介绍。

图1

    将资源都设置好对应的Bundle名称后,即可进行生成Bundle文件的操作,其代码就相对简单(如图2),只需调用Unity现成的API接口。在Assets/Editor(如果没有需创建)目录中创建一个合适名称的cs文件,里面加入一个生成Bundle的方法如下。然后就可以通过菜单上面的Tools/BuildBundleDefault生成Bundle文件。

图2

    [注意事项]

    1. Scene文件不能与其他资源文件设置为同一个Bundle,否则会报错误。但是多个Scene文件可以设置为同一个Bundle。

    2. 需要记录资源和Bundle以及相关依赖的关系到文件,以便在加载的时候使用。

 

二、打包Apk包

    从今天也就是2021年8月1日起,上架Google的包必须是aab格式,但暂时依然先打apk包,后续文章将带来如何打aab包。同一是在Editor目录创建一个用于写打包apk代码的cs文件。这里我略去了许多的属性设置及资源检查处理相关的代码(Bundle文件全部已放在Assets/StreamingAssets目录)。

图4 注意“加密方式”写错应该是压缩方式

   

三、运行时加载资源

    运行时加载游戏资源前首先需要加载Bundle文件,这里需要注意的就是同一个Bundle在没有卸载前不能重复加载,否则会报错。

图5

    Bundle加载完成后,就可以通过bundle.LoadAsset<GameObject>(资源路径)获取对应的对象,然后进行初始化显示。

图6

    [注意事项]

    1. 在生成Bundle的时候有特别说明需要将资源与Bundle的关系记录下来,其目的就是加载资源时加载的接口只需传入要加载的资源名称即可,而无需关心其在哪个Bundle中,当然加载接口内部需实现先通过资源名称查找Bundle并进行加载后,在返回对应的资源。

    2. 如果这个资源有依赖的资源在其他的Bundle,也需要将其他的Bundle加载进来,否则就会出现丢失资源的问题。

    3. 加载场景的方式比较特殊需要单独处理。

四、总结

    本篇介绍了生成Bundle文件、打apk包、然后运行时加载Bundle文件读取资源的流程。主体的流程就这么多,打包过程中还可以加入很多其他的流程,例如资源检查、插件打包选择等等。关于Android App Bundle(AAB)包目前已经完成了整体的打包和加载流程,为了确保准确性将会在Google商店上架测试之后再做介绍。

    文章来自我的公众号,大家如果有兴趣可以关注,具体扫描关注下图。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: