这是Addressable实战的第一篇文章,在这一系列实战文章当中,并不会详细和深入地介绍Addressable的原理和技术细节,相反只会聚焦于如何利用Addressable实现游戏实际开发当中的方案和所需功能。力求帮助开发者能实现“程序写完成就能在手机上跑起来”的目标。如果开发者想更深入的了解Addressable的相关技术,个人推荐阅读官方文档和源码是个十分不错的选择。ok,我们废话少说,让我们开始Addressable之旅吧。
Addressable 是 AssetBundle的继承者,也是官方力荐的资源加载、管理的方案。那么它和前任AssetBundle相比较,会有以下优缺点:
AssetBundle:
1. 加载方式需要先加载bundle包,再加载资源,且bundle包需要具体地址路径
2. 要编程实现加载、管理依赖关系
3. 要编程实现资源引用计数和资源内存管理
4. 开发时,要编程实现原生资源模式和bundle包模式切换运行、测试
5. 要编程实现热更流程
Addressable:
1. 加载资源方式灵活,只需要一个key或一个lable标签就可以取到资源
2. 自动加载依赖,无需关心各种依赖关系,使用者无感
3. 自动计算资源引用计数,自动管理、释放内存
4. 开发时可实现三种模式切换运行,原生资源模式、半虚拟模式、真bundle包模式
5. 内置热更流程实现,但流程固化,按需使用(后续文章会解释热更流程固化问题)
提示:Addressable系统的底层仍然是Assetbundle,所以旧版Assetbundle的缺点在Addressable上仍然有部分存在,但Addressable在此基础上做了一些优化和自动化实现,对开发效率的提升和开发者的使用体验也更友好。例如,在资源加载方式上提供了异步和同步的两种接口,对游戏的性能优化也起到了一定的帮助,使开发者编写异步加载资源代码又降低了门槛。 下面我们来认识怎么安装和使用Addressable吧。
首先我们打开unity 并点击如下图菜单:
打开Package Manager窗口后按图示操作:
稍等一会,安装完成后,我们再点击如下菜单:
打开Adressable Groups 窗口:
打开如下图窗口:
上图初始化Addressable 后,自动生成了两个组:Built In Data 和 Default Local Group(Defalut),这两个组都是不可删除的组。顾名思义,第一个组是必须打进包体的资源组,如内置shader和Resouces文件夹下的资源。第二个组是默认组,如果除了内置资源组外只有一个组,那么这个组一定是默认组。如果有多个组,那么是可以改变默认组的。
默认组的作用是,如果新增的资源勾选上Addressable 选项时且没有选择归属到那个组,那么会自动归属到默认组下,如下图所示:
当然,我们也可以直接拖动资源到其它组下。下面,我们继续学习如何将资源添加到组内,并修改它的访问地址。
我们添加一个材质资源,并勾选上Addressable, 如下图:
我们再将"Assets/Res/matFirst.mat" 拖动到 Group1 组下,并点击重命名为“matFirst”,如下图:
修改为"matFirst"的原因是,addressable是根据名称寻址然后加载资源的,未改之前寻址名称是一长串的资源地址字符串“Assets/Res/matFirst.mat”,对后续的开发十分不便。
到此,我们实现了如下四步:
1. Addressable的安装
2. Addressable的初始化
3. Addressable资源的添加
4. Addressable资源的寻址重命名
熟悉这四步后,基本上可以利用Addressable操作组织游戏资源了。下一篇文章我们将会实现一个Addressable加载管理器,完成如何加载、利用已添加进Addressable的资源。