来源:unity官方微信平台
对于网络游戏流行的当下,资源更新可以说是游戏系统中的一个必备功能。通过将游戏的资源和程序进行部分分离,资源可以随时进行更新,即可以减小安装包的大小,提升用户体验,又可以对内容进行不断的更新,满足持续运营的需求。正是考虑到这是开发者普遍的一个需求,因此,Unity推出了Addressable系统和云端资源分发(Cloud Content Delivery, 简称CCD)服务(更多关于CCD服务的介绍,欢迎点击“阅读原文”)。
但是由于功能和服务算是推出不久,资料和教程比较缺乏,因此本文我们将以实例出发,讲解快速实现远程资源加载,预加载以及Addressable资源更新策略等一些开发者比较关心的知识点。希望能够抛砖引玉,帮助大家尽快熟悉Addressable和CCD服务的使用。
快速实现远程资源的加载
为了实现远程资源的更新,一方面我们需要客户端具有远程资源下载的能力,并优先加载本地缓存的资源,而Addressable正好提供了这样的能力。Addressable系统构建在Asset Bundle之上,为开发者提供了资源打包,编址以及异步加载的能力。

另一方面,我们需要一个可以存放并可以稳定下载资源的CDN。相信对于大多数熟悉Unity开发的客户端同学,这可能是一个陌生的领域。因此,Unity特别推出了专门针对游戏资源更新的服务CCD,希望能够为大家提供尽可能简单的资源上传和管理服务。通过Unity hub的游戏云页签,你可以快速到达CCD产品页,点击立即使用,可以快速进入我们为你准备好的新手教程。

只需简单几步,你就可以创建好存储桶,上传资源并获取好下载地址。
CCD除了提供资源资源管理的入口,其中有两个功能可以说专门为游戏资源更新所准备:多存储桶和徽章(Badges)功能。
多存储桶
为了应对不同开发环境中的资源混在一起,CCD可以为开发,测试以及产品等环境创建不同的存储桶,并可以将资源文件从一个桶推送到另一个桶。

徽章(Badges)
徽章(Badges)拥有固定的URL,通常新的发布项会默认设置为Latest的徽章,该徽章的URL会自动重定向到最新的资源发布项。这样应用不需要变更下载地址,就可以下载最新的资源包。当然开发者还可以根据自身需要添加不同的徽章。

另外,我们已经为大家准备好了一个远程关卡加载的案例和示例项目方便大家学习。
工程地址:
https://ucgbucket.unitychina.cn/AssetStreaming/gettingStarted.zip
使用Addressable进行预加载
由于网络不稳定等因素,很多开发者还是希望在游戏开始前提前下载好关键资源,避免在游戏中下载失败。Addressable除了常用的使用时加载外,同样为大家提供了预加载的机制来应对开发需求。


下载过程中,通过AsyncOperationHandle的GetDownloadStatus().Percent获取下载进度。
代码案例:


具体使用步骤可以查看教程:
示例工程:
https://ucgbucket.unitychina.cn/AssetStreaming/PreLoadSample.zip
资源更新策略
游戏或者应用的资源更新是一个持续的流程,通常我们为了减小App的大小,会把部分资源分离出来,作为首次资源更新包,之后当有资源更新的时候再制作增量更新包。而Addressable已为开发者提前准备好了这样的更新策略,只需要一些设置即可实现。

下面我们来看一个典型的资源更新流程中如何制作资源包。
首先,我们我们会制作出一个静态包和资源清单文件(CataLog)并上传CCD服务。

然后,客户端将远程静态资源包和CataLog同步到本地。

接下来,我们可以基于静态包信息制作出增量更新,也就是动态包,然后将更新后的CataLog和动态包同步到CCD服务。

最后,客户端会根据最新的CataLog下载增量包到本地。直到下一个app版本更新前,客户端都会进行这样的增量更新逻辑。

具体的步骤可以查看视频教程:
示例项目地址:
https://ucgbucket.unitychina.cn/AssetStreaming/WorkflowSample.zip
通过以上介绍,可以看到通过Addressable和CCD的组合构建资源更新系统还是比较便利。当然了,我们也会根据大家的反馈和意见,不断的优化系统功能。欢迎大家到untiy问答社区提出问题和意见。
问答社区地址:
https://unity.cn/ask/home?q=Unity%E6%B8%B8%E6%88%8F%E4%BA%91
另外,目前CCD服务对中小开发者免费开放,欢迎大家前来尝试:

原创文章,作者:CG世界,如若转载,请注明出处:https://www.cgworld.wiki/36818.html