
- [【Unity工具篇】| 使用YooAsset接入自己的游戏项目,实现完整热更新流程](#【Unity工具篇】| 使用YooAsset接入自己的游戏项目,实现完整热更新流程)
-
- 一、接入项目介绍:飞翔的牛马
-
- [1.2 效果展示](#1.2 效果展示)
- [1.3 使用说明及下载](#1.3 使用说明及下载)
- 二、导入YooAsset
- 三、添加相关辅助工具
- 四、添加具体热更流程脚本
-
- [4.1 添加具体事件](#4.1 添加具体事件)
- [4.2 状态机](#4.2 状态机)
- [4.3 PatchOperation](#4.3 PatchOperation)
- [4.4 热更新页面PatchWindow](#4.4 热更新页面PatchWindow)
- 五、本地项目改造
-
- [5.1 脚本接入](#5.1 脚本接入)
- [5.2 热更资源管理](#5.2 热更资源管理)
- 六、热更流程
- 七、Build测试资源热更新
-
- [7.1 Build测试游戏](#7.1 Build测试游戏)
- [7.2 修改游戏内容,测试资源热更新](#7.2 修改游戏内容,测试资源热更新)
- 总结

前言
- 前面文章介绍了YooAsset的原理和接入官方示例文档的文章介绍,本文使用YooAsset接入自己的游戏项目做示例。
- 【Unity工具篇】| 资源管理插件YooAsset,原理及相关配置
- 【Unity工具篇】| 游戏完整资源热更新流程,YooAsset官方示例项目
- 具体接入方法有很多种,本文会参照官方示例 Space Shooter 太空战机DEMO 用到的方式接入自己的游戏项目。
【Unity工具篇】| 使用YooAsset接入自己的游戏项目,实现完整热更新流程
一、接入项目介绍:飞翔的牛马
本篇文章直接使用前面用AI一句话生成的游戏作为接入YooAsset的示例项目。
对AI生成游戏感兴趣的小伙伴可以查看这篇文章:Unity+AI 用一句话制作完整小游戏:飞翔的牛马【AI纯添加-0手工代码】
接下来接入YooAsset实现资源热更新完整流程示例。
1.2 效果展示
| 初始效果 | 资源热更新之后 |
|---|---|
![]() |
![]() |
1.3 使用说明及下载
- CSDN下载地址:飞翔的牛马
- 白嫖地址:VX搜我博客名字,回复【素材资源】
二、导入YooAsset
打开管理界面 Edit/Project Settings/Package Manager
csharp
// 输入以下内容(国际版)
Name: package.openupm.com
URL: https://package.openupm.com
Scope(s): com.tuyoogame.yooasset

在Edit/Windows/Package Manager 的 MyRegistries 中找到YooAsset进行安装。

三、添加相关辅助工具
本文演示添加的工具是基于项目没有使用基础框架时使用的,如果自身项目中已有对应的事件系统、状态机等,那可以根据自身框架中的实际用法进行改造。
主要展示项目从0接入YooAsset的一种思路和具体方法,并不局限于此。
以下工具是从YooAsset示例工程Space Shooter 太空战机DEMO中提取出的,直接将ThirdParty文件夹复制到自己项目中即可。

- UniFramework.Event:一个轻量级的事件系统。
- UniFramework.Machine :一个轻量级的状态机。
- UniFramework.Utility :一些工具类。
四、添加具体热更流程脚本
接下来会按照示例项目的热更流程添加对应的脚本代码,如相关事件、patch状态机、patch控制器等。

可以先给YooAsset相关脚本添加一个文件夹,跟初始游戏脚本分开方便管理,后面流程捋顺了再按正常文件夹归类。
4.1 添加具体事件
UserEventDefine:用户操作流程事件,当用户触发以下情况时使用:
- UserTryInitialize:用户尝试再次初始化资源包
- UserBeginDownloadWebFiles:用户开始下载网络文件
- UserTryRequestPackageVersion:用户尝试再次请求资源版本
- UserTryUpdatePackageManifest:用户尝试再次更新补丁清单
- UserTryDownloadWebFiles:用户尝试再次下载网络文件
这些事件一般都是热更流程中发出,可以根据自身实际项目情况进行增删事件。
如 UserTryInitialize(用户尝试再次初始化资源包) 触发是由于热更包初始化失败,由热更流程状态机(FsmInitializePackage状态)中发出事件,PatchOperation监听事件并改变热更流程状态重新进行初始化资源包。

PatchEventDefine补丁包相关事件,当用户触发以下情况时使用:
- InitializeFailed:补丁包初始化失败
- PatchStepsChange:补丁流程步骤改变
- FoundUpdateFiles:发现更新文件
- DownloadUpdate:下载进度更新
- PackageVersionRequestFailed:资源版本请求失败
- PackageManifestUpdateFailed:资源清单更新失败
- WebFileDownloadFailed:网络文件下载失败
该系列事件都是在热更状态机的各个状态中发出,用于热更流程中某一步的具体处理事宜。
如 FoundUpdateFiles(发现更新文件) 由状态FsmCreateDownloader触发,会在热更弹窗中提示发现新的下载内容以及资源包大小,需要用户确认下载等。

4.2 状态机
一系列热更新状态脚本:初始化、检查版本、更新热更清单文件、创建下载器、下载包文件、资源下载完成、清理未使用的缓存文件、开始游戏。
使用状态机控制热更流程,PatchOperation和PatchWindow负责监听在各个状态中发出的不同事件进行相关处理。

4.3 PatchOperation
PatchOperation 负责创建上面的一系列不同状态,监听UserEventDefine用户操作事件,控制patch状态切换。

4.4 热更新页面PatchWindow
程序运行时启动,挂在热更新UI面板中,监听PatchEventDefine事件,负责热更流程中某些状态的处理。
如触发新的更新文件时会打开弹窗进行更新文件提示,当用户处理完相关操作时,再发送用户操作事件,让PatchOperation进行下个热更状态的切换。

PatchWindow预制体也是从官方示例复制到自身项目的Resources下直接使用。
五、本地项目改造
5.1 脚本接入
上面的操作是一些实现热更流程示例必备的操作,未涉及本地项目的修改,后续就要对本地项目接入这套系统了。
添加 SceneEventDefine 场景切换事件,主要用于切换场景时使用,如从主页面UI点击开始游戏进入战斗场景。

添加 GameManager ,负责监听场景切换事件,处理场景切换等。这里的场景切换用到的YooAsset异步加载场景的方法。

添加两个场景脚本,用于两个场景的UI页面启动。
- SceneHome 挂载于主页面场景中,用于加载游戏主页面
- SceneBattle 挂载于战斗场景中,用于加载战斗UI页面

5.2 热更资源管理
在Project面板Resources文件夹下右键创建一个YooAssetSettings。

在Project面板右键创建一个AssetBundleCollectorSetting,然后打开YooAsset->AssetBundle Collector ,把需要进行热更的资源添加进去。

这里把UI面板、场景、和图片素材添加进去测试热更资源。

打开YooAsset->AssetBundle Builder ,点击ClickBuild,等待打包完成。

提示:
本文只是提供一种接入YooAsset的示例,如自身项目有对应的UI框架及资源管理框架等,可根据自身情况进行YooAsset拓展使用。
此处热更资源管理不理解的可以参考前面关于YooAsset原理及官方示例文章,此处不再详细介绍。
六、热更流程

Boot 程序启动入口
初始化事件、资源系统,加载热更弹窗面板,开始补丁更新流程,设置资源包,切换游戏主页面场景

PatchOperation
创建状态机、监听热更弹窗面板发出的用户操作事件。
开启第一个状态FsmInitializePackage,正常情况下后续状态挨个切换直至完成整个热更流程,某个状态中出现情况时发送热更流程事件。收到用户操作事件后可切换状态机当前状态。
PatchWindow
热更弹窗,监听状态机发出的patch流程事件,收到patch事件后,处理相关事宜或者给PatchOperation 发事件用于切换热更流程状态。
整个热更流程由PatchOperation和PatchWindow相互配合完成
七、Build测试资源热更新
7.1 Build测试游戏
接入完之后可以先切换Editor Simulate Mode 在Unity中运行测试,如果没问题再选择Host Play Mode进行Build打包测试。
运行之后不能正常游玩,那就需要排查下在哪个环节出的问题,然后继续修改咯。

Build一个PC包出来游玩。

正常游玩画面如下:

如不能正常游玩,建议重新看下这篇学习官方示例的文章:【Unity工具篇】| 游戏完整资源热更新流程,YooAsset官方示例项目
7.2 修改游戏内容,测试资源热更新
在主页面中右上角添加一个小牛马,在战斗场景游戏结束时添加一个背景图片 。


重新打开YooAsset->AssetBundle Builder ,点击ClickBuild,等待打包完成。
把刚Build出的资源包拷贝到我们指定的热更文件夹中。

此时重新运行游戏测试,会有一个热更新弹窗,点击Yes下载游玩即可。

在没有重新打包的情况下,即可修改游戏中的内容,完成一次热更新流程。
总结
- 本文演示了一个将自己的轻量化项目接入YooAsset实现热更新的流程。
- 具体项目接入时根据自身项目实际情况选择方案即可。
- 关于YooAsset相关文章也写过几篇文章用于介绍其原理及使用方法,有需求的小伙伴可以前往专栏逐篇查看:Unity 实用工具集合
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创 🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------




资料白嫖,技术互助
| 学习路线指引(点击解锁) | 知识定位 | 人群定位 |
|---|---|---|
| 🧡 Unity系统学习专栏 | 入门级 | 本专栏从Unity入门开始学习,快速达到Unity的入门水平 |
| 💛 Unity实战类项目 | 进阶级 | 计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。 |
| ❤️ 游戏制作专栏 | 难度偏高 | 分享学习一些Unity成品的游戏Demo和其他语言的小游戏! |
| 💚 游戏爱好者万人社区 | 互助/吹水 | 数万人游戏爱好者社区,聊天互助,白嫖奖品 |
| 💙 Unity100个实用技能 | Unity查漏补缺 | 针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺 |
