Unity热更新介绍
打包函数
BuildPipeline.BuildAssetBundles("AssetBundles", BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.Android);
打包策略和方案
- 按文件夹打包:Bundle数量少,首次下载块,但是后期更新补丁大
- 按文件打包:Bundle数量多,首次下载较慢,更新补丁小
- 整包:完整更新资源放在项目中,下载时间长,首次更新少
- 分包:大部分热更资源放在服务器上,进入游戏后下载到热更目录,安装包下,但是首次更新下载时间久。
简述热更新
热更新原理
Unity 游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新。
Unity 提供可以热更的方案就是 AssetsBundle(后面简称 AB)。资源、代码都可以打成 AB 包,放到服务器上,然后比对版本,进行热更。Unity3D 的热更新会涉及 3 个目录:游戏资源目录、数据目录、网络资源地址。
游戏资源目录:游戏的安装目录,如下所示:
Mac OS 或 Windows:Application.dataPath + “/StreamingAssets”;
IOS:Application.dataPath + “/Raw”;
Android: jar:file://" + Application.dataPath + “!/assets/”
数据目录:由于“游戏资源目录”在 Android 和 IOS 上是只读的,不能把网上的下载的资源放到里面,所以需要建立一个“数据目录”,该目录可读可写。不同平台下,“数据目录”的地址也不同,LuaFramework 的定义如下:
Android 或 IOS:Application.persistentDataPath + “/LuaFramework”
Mac OS 或 Windows:C:/LuaFramework/
调试模式下:Application.dataPath + "/StreamingAssets/
网络资源地址:又名服务器地址,是用来存放游戏资源的网址
热更步骤如下:
- 第一次开启游戏后,程序将“游戏资源目录”的内容复制到“数据目录”中。(这个步骤只会执行一次,下次再打开游戏就不复制了)。
- 游戏开启后,程序会从“网络资源地址”下载一些更新的文件到数据目录。
- 游戏过程中的资源加载,都是从“数据目录”中获取解包。
热更新流程
热更的基本流程分为两部分:
导出热更资源
(1) 打包热更资源的对应的 md5 信息(涉及到增量打包)
(2) 上传热更 ab 到热更服务器
(3) 上传版本信息到版本服务器
游戏流程热更
(1) 启动游戏
(2) 根据当前版本号,和平台号去版本服务器上检查是否有热更
(3) 从热更服务器上下载 MD5 文件,比对需要热更的具体文件列表
(4) 从热更服务器上下载需要热更的资源,解压到热更资源目录
(5) 游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载
更新注意:
(1) 要有下载失败重试几次机制
(2) 要进行超时检测
(3) 要记录更新日志,例如哪个资源导致了整个更新流程失败
版本号管理
客户端版本号是 4 位来标识,假设是 X.Y.Z.W
X:【巨大版本号】这一位其实就是 1,没事一般不会动他,除非有太巨大的变化
Y:【整包更新版本号】:我们游戏一般一个月会有一个比较大的版本迭代,这种版本会走商店,每次提交 Y 值+1;
Z:【服务器协议版本号】,一个月度版本周期内,万一 SDK 有问题或者 C#层有发现 bug,需要更新商店,这一位会+1,这里单独留一个 Z 处理这种商店版本号,是因为不想影响 Y 值,而商店提交新包要求版本号必须有增加,buildNum 也是商店要求必须要升的;
W:【编译版本号\热更版本号】,每次热更都+1 。
【第 2 位加 1 之后,3、4 位全部清 0】
相关文章:
Unity热更新介绍
打包函数 BuildPipeline.BuildAssetBundles("AssetBundles", BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.Android);打包策略和方案 按文件夹打包:Bundle数量少,首次下载块,但是后期更新补丁大按文件打包&#…...
在虚拟机centos7中部署docker+jenkins最新稳定版
在虚拟机centos7中部署dockerjenkins最新稳定版 查看端口是否被占用 lsof -i:80 查看运行中容器 docker ps 查看所有容器 docker ps -a 删除容器 docker rm 镜像/容器名称 强制删除 docker rmi -f 镜像名 查看当前目录 pwd 查看当前目录下所有文件名称 ls 赋予权限 chown 777 …...
nodejs express vue 点餐外卖系统源码
开发环境及工具: nodejs,vscode(webstorm),大于mysql5.5 技术说明: nodejs express vue elementui 功能介绍: 用户端: 登录注册 首页显示搜索菜品,轮播图…...
微信小程序导入js使用时候报错
我是引入weapp库时候,导入js会报错。 需要在小程序开发工具里面配置 就可以了。...
相机存储卡被格式化了怎么恢复?数据恢复办法分享!
随着时代的发展,相机被越来越多的用户所使用,这也意味着更多的用户面临着相机数据丢失的问题,很多用户在使用相机的过程中,都出现过不小心格式化相机存储卡的情况,里面的数据也将一并消失,相机存储卡被格式…...
Firefox修改缓存目录的方法
打开Firefox,在地址栏输入“about:config” 查找是否有 browser.cache.disk.parent_directory,如果没有就新建一个同名的字符串,然后修改值为你要存放Firefox浏览器缓存的目录地址(E:\FirefoxCacheFiles) 然后重新…...
maven子模块无法导入jar包问题
明明本地仓库有jar包 maven子模块无法导入jar包,然后放到父项目的pom.xml则可以导入 可以试试更新仓库后,引入成功...
ardupilot开发 --- 代码解析 篇
0. 前言 根据SITL的断点调试和自己阅读代码的一些理解,写一点自己的注释,有什么不恰当的地方请各位读者不吝赐教。 1. GCS::update_send 线程 主动向MavLink system发送消息包。 1.1 不断向地面站发送飞机状态数据 msg_attitude: msg_location: n…...
C++引用概述
变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),程序中通过变量来申请并命 名内存空间,通过变量的名字可以使用存储空间。引用是 C中新增加的概念,引用可以看作 一个已定义变量的别名。 引用的语法: Type&…...
精准努力,提升自己的核心竞争力——中国人民大学与加拿大女王大学金融硕士
步入职场,相信大家都想成为职场的宠儿。经过一番摸爬滚打后,在职场稳固了地位。但想叱咤职场,还需要精准努力,提升自己的核心竞争力。中国人民大学与加拿大女王大学金融硕士项目为你补给能量。 任何资产都有贬值的风险࿰…...
string【C++】
string 是什么 string 是什么 长度可变的字符串。...
【Python爬虫】selenium4新版本使用指南
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera&am…...
CCF_A 计算机视觉顶会CVPR2024投稿指南以及论文模板
目录 CVPR2024官网: CVPR2024投稿链接: CVPR2024 重要时间节点: CVPR2024投稿模板: WORD: LATEX : CVPR2024_AuthorGuidelines CVPR2024投稿Topics: CVPR2024官网: https://cvpr.thecvf.com/Conferences/2024CV…...
什么是鉴权?一篇文章带你了解postman的多种方式
一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁,您想要进入室内,必须通…...
go 语言介绍
背景 一直有在零散的时间用go写点代码,正好借着最近比较有时间写东西的契机,给这个看着年轻,实际也已经发展10几年,并在当下众多开发领域都有不可忽视作用的语言做个介绍吧 golang 的起点 golang 的诞生可以说是时代造就了它&a…...
查询平均提速 700%,奇安信基于 Apache Doris 升级日志安全分析系统
本文导读: 数智时代的到来使网络安全成为了不可忽视的重要领域。奇安信作为一家领先的网络安全解决方案领军者,致力于为企业提供先进全面的网络安全保护,其日志分析系统在网络安全中发挥着关键作用,通过对运行日志数据的深入分析…...
Linux越学越头疼,我要怎么办?
最近,听到一些同学说,“Linux越学越头疼”。其实这句话,在我之前刚接触Linux的时候,也是深有感触。Linux越学越不明所以。最后干脆放弃学习,转而学习其他东西。 其实大家在初学Linux的时候, 有这个感受&am…...
使用Fiddler进行Mock测试
1、接口抓包 找到要mock的接口,打开fiddler抓包 以某某接口为例,找到下面的接口 http://XXX/SYSTEMS 2、复制该接口数据到本地 在接口上进行右键点击,选择save -> …and Open as Local File -> 默认会保存至桌面,示例中的数…...
js字符串支持多个分隔符分割
js字符串支持多个分隔符分割 场景代码 场景 用户输入内容后,支持多个分隔符(比如:中英文逗号,分号以及换号)对字符串进行分割,之后提交给后台同学解析。 代码 function splitString(inputString, separat…...
ajax-axios发送 get请求 或者 发送post请求带有请求体参数
/* axios v0.21.1 | (c) 2020 by Matt Zabriskie */ !function(e,t){"object"typeof exports&&"object"typeof module?module.exportst():"function"typeof define&&define.amd?define([],t):"object"typeof export…...
【DCTDECODE JPG】
import timeimport PyPDF2 import pdfplumber from PIL import Imagedef extract_image(page):try:# 提取第2页图片(从0开始计数)page_image pdf_image_reader.getPage(pageNumber1)extract_image(page_image)if /XObject in page[/Resources]:xObject …...
别再只用Chat了!深度挖掘Cursor的‘规则’与‘上下文’功能,打造你的专属AI编程助手
解锁Cursor的隐藏力量:从代码助手到项目级智能架构师 在AI编程工具爆发的时代,大多数开发者仅仅停留在基础对话和代码补全的层面。但Cursor的真正价值远不止于此——它能够成为你项目架构的智能协作者、团队规范的自动化执行者,以及复杂工程问…...
Python自动化办公:3分钟搞定Outlook邮件批量导出(附完整代码)
Python自动化办公:3分钟搞定Outlook邮件批量导出(附完整代码) 每天早晨打开Outlook,面对堆积如山的未读邮件,你是否也感到一阵窒息?市场部的周报、客户的需求变更、财务部的报销提醒……重要信息散落在上百…...
YOLO26涨点改进| ICCV 2025 | 独家创新首发、特征融合改进篇| 引入I-SCA / V-SCA特征融合模块,含多种创新改进,助力图像融合、小目标检测、图像分割、图像分类高效涨点改进
一、本文介绍 🔥本文给大家介绍使用 I-SCA 和 V-SCA 模块(IVSCAM)改进 YOLO26 网络模型的核心作用,是在特征提取与融合阶段增强不同层级或不同来源特征之间的交互能力,使模型能够以更明确的引导方式突出关键目标区域。其中,I-SCA 更适合强化类似显著区域、热目标或高响…...
别再死记硬背了!从硬件电路角度,图解I2C为什么必须用开漏输出和上拉电阻
从晶体管到总线协议:深度解析I2C硬件设计精髓 在嵌入式系统设计中,I2C总线因其简洁的两线制架构而广受欢迎,但许多开发者对其底层硬件实现机制存在理解盲区。当你在调试I2C设备时,是否遇到过信号波形畸变、总线冲突或电平异常的问…...
LeetCode 热题100——49.字母异位词分组
题目:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。示例 1:输入: strs ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["…...
论文AI率高不等于抄袭2026年高校政策盘点
论文AI率高,会不会被认定为学术不端?会不会影响毕业?和传统的"查重超标"性质一样吗? 这些问题在2026年毕业季被问得很多。这篇文章梳理清楚。 AI率高和抄袭:两件不同的事 先把概念说清楚: 传…...
Go语言中的正则表达式
Go语言中的正则表达式 1. 正则表达式的基本概念 正则表达式是一种用于匹配字符串中字符组合的模式。在Go语言中,正则表达式通过regexp包来实现。 2. 基本用法 2.1 编译正则表达式 package mainimport ("fmt""regexp" )func main() {// 编译正则…...
新手福音:在快马平台交互式学习openclaw更新命令语法与参数
作为一名刚接触openclaw的新手,我最初看到那些复杂的命令行参数时简直一头雾水。直到发现了InsCode(快马)平台,它用可视化的方式帮我拆解了openclaw更新命令的每个细节,现在终于能自信地操作了。下面分享我的学习心得: 命令结构拆…...
实战指南:用快马平台生成基于openclaw的mac数据清洗工具
最近在做一个数据清洗的小工具,正好用到了openclaw这个库,发现它在macOS上处理数据特别顺手。今天就把整个实战过程记录下来,顺便分享下我是怎么用InsCode(快马)平台快速生成这个工具的。 项目背景与需求分析 手头有个客户提供的销售数据csv&…...
