【Unity】 HTFramework框架(五十八)【进阶篇】资源及代码热更新实战演示(Deployment + HybridCLR)

更新日期: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.更新子模块

因为HTFrameworkDeployment模块均是以子模块形式添加进来的,所以必须更新子模块(也叫做初始化子模块):

在这里插入图片描述

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.0v2.0.0两个版本。

在这里插入图片描述

Source:主程序资源目录,会随主程序构建出去的目录,目前只有一个脚本ResourceUpdater,该脚本负责调用Deployment完成资源更新(详细业务逻辑请参阅源码)。
Source_Hotfix:热更新资源目录,其中的资源会打入AB包,脚本会打入热更程序集,如果他们产生了变化,就意味着资源版本升级了,需根据情况重打AB包,重新生成热更程序集,并在DeploymentConfig面板构建此版本,然后再上传到CDN服务器完成部署。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947425.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

路由基本配置实验

路由器用于实现不同类型网络之间的互联。 路由器转发ip分组的基础是路由表。 路由表中的路由项分为直连路由项、静态路由项和动态路由项。 通过配置路由器接口的ip地址和子网掩码自动生成直连路由项。 通过手工配置创建静态路由项。 热备份路由器协议允许将由多个路由器组…

CTFshow—远程命令执行

29-35 Web29 代码利用正则匹配过滤了flag&#xff0c;后面加了/i所以不区分大小写。 可以利用通配符绕过 匹配任何字符串&#xff0f;文本&#xff0c;包括空字符串&#xff1b;*代表任意字符&#xff08;0个或多个&#xff09; ls file * ? 匹配任何一个字符&#xff08;不…

idea 的 springboot项目spring-boot-devtools 自动编译 配置热部署

1&#xff0c;设置一 2&#xff0c;设置二 设置二&#xff08;旧版本&#xff09; CtrlShiftAlt/ 点击弹出框中Registry... 引入&#xff08;如果报错&#xff0c;换不同的版本&#xff09; <dependency><groupId>org.springframework.boot</groupId><a…

Github拉取项目报错解决

前言 昨天在拉取github上面的项目报错了&#xff0c;有好几个月没用github了&#xff0c;命令如下&#xff1a; git clone gitgithub.com:zhszstudy/git-test.git报错信息&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not rea…

TypeScript 常用类型

文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言&#xff1…

ARM200~500部署

前提&#xff1a;数据库已经安装好&#xff0c;并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件&#xff0c;更改小区名称和IP&#xff0c;并将文件上传到/…

Linux buildroot和ubuntu的异同点

Buildroot 和 Ubuntu 都是 Linux 系统的操作环境,但它们的设计理念和使用场景有很大的不同。 一、定义与目标 Buildroot Buildroot 是一个用于生成嵌入式 Linux 系统的工具集,专注于交叉编译和构建嵌入式设备的最小 Linux 环境。它的目标是为嵌入式系统提供定制化和优化的…

从0开始的opencv之旅(1)cv::Mat的使用

目录 Mat 存储方法 创建一个指定像素方式的图像。 尽管我们完全可以把cv::Mat当作一个黑盒&#xff0c;但是笔者的建议是仍然要深入理解和学习cv::Mat自身的构造逻辑和存储原理&#xff0c;这样在查找问题&#xff0c;或者是遇到一些奇奇怪怪的图像显示问题的时候能够快速的想…

免登录游客卡密发放系统PHP网站源码

源码介绍&#xff1a; 这是一个简单易用的卡密验证系统&#xff0c;主要功能包括&#xff1a; 卡密管理和验证&#xff0c;多模板支持&#xff0c;响应式设计&#xff0c;验证码保护&#xff0c;防刷机制&#xff0c;简洁的用户界面&#xff0c; 支持自定义模板&#xff0c;移…

LeetCode - 初级算法 数组(旋转数组)

旋转数组 这篇文章讨论如何通过编程实现数组元素的旋转操作。 免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例: 输入: nums = [1,2,3,

BOC调制信号matlab性能仿真分析,对比功率谱,自相关性以及抗干扰性

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

【从零开始入门unity游戏开发之——C#篇41】C#迭代器(Iterator)——自定义类实现 foreach 操作

文章目录 前言一、什么是迭代器&#xff1f;二、标准迭代器的实现方法1、自定义一个类CustomList2、让CustomList继承IEnumerable接口3、再继承IEnumerator接口4、完善迭代器功能5、**foreach遍历的本质**&#xff1a;6、在Reset方法里把光标复原 三、用yield return语法糖实现…

WordPress新安装只安装主题后发现只有首页能打开,其他路由页面都是404,并且Elementor都打不开

找到wordpress安装路径的这个文件&#xff0c;有发现里面没有内容&#xff0c;添加下面内容保存&#xff0c;重启服务器即可 # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILEN…

uniapp中使用ruoyiPlus中的加密使用(crypto-js)

package.json中添加 "crypto-js": "^4.2.0", "jsencrypt": "^3.3.2",但是vue2中使用 import CryptoJS from cryptojs; 这一步就会报错 参照 参照这里&#xff1a;vue2使用CryptoJS实现信息加解密 根目录下的js文档中新增一个AESwork.…

无需训练!多提示视频生成最新SOTA!港中文腾讯等发布DiTCtrl:基于MM-DiT架构

文章链接&#xff1a;https://arxiv.org/pdf/2412.18597 项目链接&#xff1a;https://github.com/TencentARC/DiTCtrl 亮点直击 DiTCtrl&#xff0c;这是一种基于MM-DiT架构的、首次无需调优的多提示视频生成方法。本文的方法结合了新颖的KV共享机制和隐混合策略&#xff0c;使…

RabbitMQ基础篇之快速入门

文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列&#xff1a;创建 hello.queue1 和 hello.queue2 两个队列。消息发送…

ESP32S3 + IDF 5.2.2 扫描WiFi

ESP32S3 IDF 5.2.2 扫描WiFi 目录 1 资料 2 通过Wi-Fi库扫描附近的网络 2.1 通过idf命令创建工程 2.2 编写测试用例 2.3 优化测试用例 3 小结 1 资料 在ESP平台基于IDF开发WiFi相关功能&#xff0c;主要就是基于IDF的Wi-Fi库进行二次开发。可供参考的官方资料&#xff…

2025-1-2-sklearn学习(30)模型选择与评估-验证曲线: 绘制分数以评估模型 真珠帘卷玉楼空,天淡银河垂地。

文章目录 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型30.1. 验证曲线30.2. 学习曲线 sklearn学习(30) 模型选择与评估-验证曲线: 绘制分数以评估模型 文章参考网站&#xff1a; https://sklearn.apachecn.org/ 和 https://scikit-learn.org/stable/ 每种估…

统信系统设置代理的问题

统信系统设置代理的问题 问题表现方式一方式二 问题表现 统信系统下有系统代理和应用代理两个代理。设置系统代理时&#xff0c;git不能经过代理拉取代码。但是设置应用代理时&#xff0c;可以用git通过代理拉代码。 这是系统代理&#xff0c;在这里设置 ip 端口&#xff0c;…

STM32-笔记19-串口打印功能

复制项目文件夹03-流水灯&#xff0c;重命名为19-串口打印功能 打开项目 在主函数中&#xff0c;添加头文件、和串口初始化函数&#xff08;设置波特率&#xff09;和输出函数&#xff0c;如图所示&#xff1a; 软件部分就设置好了 下面是硬件部分 接线&#xff1a;使用USB…