更新日期:2025年1月2日。
Github源码:[点我获取源码]
索引
- 资源及代码热更新实战演示
- 运行演示Demo
- 1.克隆项目工程
- 2.更新子模块
- 3.打开项目
- 4.打开入口场景
- 5.设置远端资源服务器地址
- 6.导入HybridCLR
- 7.初始化HybridCLR
- 8.发布项目
- 9.部署资源版本
- 10.运行Exe
- 11.升级资源版本
- 12.文件目录说明
资源及代码热更新实战演示
本文会基于Deployment
+ HybridCLR
的方式实现资源及代码热更新
的实战演示,两者的使用方法参考之前的文章:
【Unity】 HTFramework框架(五十四)【进阶篇】Deployment 轻量级资源部署管线。
【Unity】 HTFramework框架(五十二)使用 HybridCLR 热更新。
运行演示Demo
1.克隆项目工程
首先,进入本文开头处的源码链接,Clone项目工程到本地:
2.更新子模块
因为HTFramework
及Deployment
模块均是以子模块形式添加进来的,所以必须更新子模块
(也叫做初始化子模块):
3.打开项目
使用Unity 2022.3.34
打开此项目。
4.打开入口场景
5.设置远端资源服务器地址
也即是设置CDN
服务器地址(任意一个可访问的远端文件服务器都可),为了达到演示效果,这一点是必须的:
6.导入HybridCLR
导入完成后,在Main
检视器面板查看,以确保HybridCLR
已正确导入:
7.初始化HybridCLR
点击菜单HybridCLR - Generate - All,以完成HybridCLR
的初始化。
8.发布项目
将项目发布为可执行程序(目前只演示Window平台,其他平台同理):
9.部署资源版本
将BuildResource/v1.0.0
版本(事先构建好的版本)的资源部署到CDN
服务器(也即是第5步设置的文件服务器地址),作为初始版本:
10.运行Exe
我们运行HotfixDemo.exe
后,首先会弹出资源热更新面板
:
解析:
因为目前远端部署的版本为:v1.0.0
。
本地版本为:无
(因为是首次运行程序,还未下载任何资源)。
所以会进入资源热更新流程
,将远端部署的最新版本
下载到本地并覆盖。
点击确定,更新资源完成后,进入程序首页,可以看到当前的资源版本已升级到v1.0.0
:
接下来退出此程序。
11.升级资源版本
将BuildResource/v2.0.0
版本(事先构建好的版本)的资源部署到CDN
服务器(也即是第5步设置的文件服务器地址),覆盖之前的v1.0.0
版本:
v2.0.0
版本在代码中修改了登录界面
按钮上的文字,之前是登录 v1.0.0
,现在是登录 v2.0.0
:
/// <summary>
/// 登录界面
/// </summary>
[UIResource("ui", "Assets/Source_Hotfix/Prefabs/LoginPanel.prefab", "LoginPanel")]
public class UILogin : UILogicResident
{
protected override bool IsAutomate => false;
/// <summary>
/// 初始化
/// </summary>
public override void OnInit()
{
base.OnInit();
UIEntity.FindChildren("LoginButton").rectTransform().AddEventListener(OnLogin);
}
public override void OnOpen(params object[] args)
{
base.OnOpen(args);
UIEntity.FindChildren("Txt_Version").GetComponent<Text>().text = "当前资源版本:" + DeploymentConfig.Current.LocalVersion.Version;
UIEntity.FindChildren("LoginButton/Text").GetComponent<Text>().text = "登录 v2.0.0";
}
private void OnLogin()
{
Main.m_Procedure.SwitchProcedure<ChooseProcedure>();
}
}
我们再次运行HotfixDemo.exe
后,依然会弹出资源热更新面板
:
解析:
因为目前远端部署的版本为:v2.0.0
。
本地版本为:v1.0.0
(版本不匹配)。
所以会进入资源热更新流程
,将远端部署的最新版本
下载到本地并覆盖。
注意:之所以下载文件只有一个,因为我们只改动了一个脚本,所有脚本会编译为一个热更程序集,所以只需要下载该热更程序集。
点击确定,更新资源完成后,进入程序首页,可以看到当前的资源版本已升级到v2.0.0
:
我们没有重新发布可执行程序,那么资源及代码的热更新流程便完成了演示。
当然,如果你想测试自行构建资源版本,按照Deployment的标准操作流程走一遍即可。
注意:预制体等打入AB包的文件没有改动的情况下,不要重新打AB包,代码没有改动的情况下,不要重新生成热更程序集,以保持每个版本最少的下载量。
12.文件目录说明
AssetBundles:打AB包的输出目录,原则上不用干涉,Deployment构建时会自动提取里面的AB包资源。
BuildResource:资源版本构建的输出目录,里面存放了资源版本构建的所有历史版本,目前预构建了v1.0.0
和v2.0.0
两个版本。
Source:主程序资源目录,会随主程序构建出去的目录,目前只有一个脚本
ResourceUpdater
,该脚本负责调用Deployment
完成资源更新(详细业务逻辑请参阅源码)。
Source_Hotfix:热更新资源目录,其中的资源会打入AB包,脚本会打入热更程序集,如果他们产生了变化,就意味着资源版本升级了,需根据情况重打AB包,重新生成热更程序集,并在DeploymentConfig
面板构建此版本,然后再上传到CDN
服务器完成部署。