【Unity工具篇】| 使用YooAsset接入自己的游戏项目,实现完整热更新流程


前言


【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 ManagerMyRegistries 中找到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的知识以达到查漏补缺
相关推荐
qq_357389632 小时前
游戏电竞俱乐部护航下单系统源码
游戏
谷歌开发者2 小时前
成就高品质游戏的获客之道|Google Play Games Level Up 计划
游戏
张老师带你学2 小时前
Unity 低多边形 赛博朋克城市 拼装 模型 道路 建筑 buildin
科技·游戏·unity·游戏引擎·模型
PassionY2 小时前
Unity NGO 系列教程(四):多人抓取的权限争夺
unity·xr·network·ngo·multiplayer·ownership·多人竞态权
ฅ^•ﻌ•^ฅ12 小时前
Unity mcp并使用claude code制作游戏
游戏·unity·游戏引擎
程序员正茂2 小时前
Unity3d使用SRDebugger屏幕输出调试信息
unity·srdebugger
张老师带你学2 小时前
unity资源 buildin 低多边形 小镇村
科技·游戏·unity·游戏引擎·模型
PassionY2 小时前
Unity NGO 系列教程(五):如何构建多人联机区域触发系统
unity·rpc·ngo·网络触发器·serverrpc·networkvariable·authority
小布的学习手记2 小时前
拒绝“传话游戏”!DenseNet 如何让神经网络开启“群聊”模式
人工智能·神经网络·游戏