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…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
