Unity 资源热更新

news2024/9/21 4:24:41

热更新流程

  1. 启动游戏
  2. 根据当前版本号,和平台号去版本服务器上检查是否有热更
  3. 热更服务器上下载md5文件,比对需要热更的具体文件列表
  4. 热更服务器上下载需要热更的资源,解压到热更资源目录
  5. 游戏运行加载资源,优先到热更目录中加载,再到母包资源目录加载

这些目录包含着不同版本的资源文件,以及用于版本控制的Files.txt,里面存放着资源文件的名称和md5码。

客户端版本号我们是4位来标识,假设是X.Y.Z.W

X:【巨大版本号】这一位其实就是1,没事一般不会动他,除非有太巨大的变化,目前反正还是1;
Y:【整包更新版本号】:我们游戏一般一个月会有一个比较大的版本迭代,这种版本会走商店,每次提交Y值+1;
Z:【服务器协议版本号】,一个月度版本周期内,万一SDK有问题或者C#层有发现bug,需要更新商店,这一位会+1,这里单独留一个Z处理这种商店版本号,是因为不想影响Y值,而商店提交新包要求版本号必须有增加,buildNum也是商店要求必须要升的;
W:【编译版本号\热更版本号】,每次热更都+1 。
【第2位加1之后,3、4位全部清0】

作用

相对于Resources下的资源,AB包可以更好地管理资源,更灵活方便,更易于做热更新相关工作

在这里插入图片描述

AssetBundle

AssetBundle 是一个存档文件,包含可在运行时由 Unity 加载的特定于平台的非代码资源(比如模型、纹理、预制件、音频剪辑甚至整个场景)。AssetBundle 可以表示彼此之间的依赖关系;例如,一个 AssetBundle 中的材质可以引用另一个 AssetBundle 中的纹理。

AssetBundle对于可下载内容(DLC)、减少初始安装大小、加载针对最终用户平台优化的资产以及减少运行时内存压力都很有用

AssetBundle里面包含了什么?

  • 首先是磁盘上的实际文件,这称为AssetBundle archive。AssetBundle archive是一个容器,就像一个文件夹一样,其中包含了额外的文件。这些额外的文件包括两类:
    • 序列化文件,其中包含分解为各个对象并写入此单个文件的资源。
    • 资源文件,这是为某些资源(纹理和音频)单独存储的二进制数据块,允许 Unity 高效地在另一个线程上从磁盘加载它们。
  • 也可以指:通过代码进行交互以便从特定 AssetBundle 存档加载资源的实际 AssetBundle 对象。该对象包含添加到此存档文件的资源的所有文件路径的映射

游戏资源目录

  • Resources:全部资源都会被压缩,转化成二进制。打包后该路径不存在,不可写也不可读。只能使用Resources.Load加载资源。
  • Streaming Assets:全部资源原封不动打包。在移动平台下,是只读的,不能写入数据,其他平台下可以使用System.File类进行读写。在任意平台都可以使用AssetBundle.LoadFromFile来从此文件夹读取加载ab包。

AssetBundle管理

请添加图片描述

打包资源

将需要同时加载的资源放在同一个包里,各个包之间会保存相互依赖的信息

分组依据:

  • 逻辑实体分组:是指根据资源所代表的项目功能部分将资源分配给 AssetBundle。这包括各种不同部分,比如一组角色的所有模型和动画、多个关卡之间共享的景物的纹理和模型
  • 类型分组:要构建供多个平台使用的 AssetBundle,类型分组是最佳策略之一。如果音频压缩设置在 Windows 和 Mac 平台上完全相同,则可以将所有音频数据打包到 AssetBundle 并重复使用,而着色器往往使用更多特定于平台的选项进行编译
  • 并发内容分组: 将需要同时加载和使用的资源捆绑在一起。可以将这些类型的捆绑包用于基于关卡的游戏(其中每个关卡包含完全独特的角色、纹理、音乐等)。

卸载资源

在管理Asset和AssetBundle时,最重要的一点是调用AssetBundle.unload时的方式,unload参数为true或false。

此API将卸载正在调用的AssetBundle的包头信息。unload参数决定是否也卸载从此AssetBundle实例化的所有对象。如果设置为true,那么从AssetBundle创建的所有对象也将立即卸载,即使它们目前正在活动场景中被引用。

在这里插入图片描述

如果调用了AssetBundle.Unload(True),则M将从场景中移除,销毁并卸载。但是,如果调用AssetBundle.Unload(False),则AB的包头信息将被卸载,但M将保持在场景中,并且仍然是可用的。

调用AssetBundle.Unload(False)破坏了M和AB之间的链接。如果AB稍后再次加载,则AB中包含的对象的新副本将会被加载到内存中。此后如果再次加载AB,将再次加载这个包头信息的新副本,但是M和这个包并不会重新建立连接。如果此时调用AssetBundle.LoadAsset()来重新加载M,将会有两个相同的副本M在现场。

在这里插入图片描述

为了避免这种情况,应该使用AssetBundle.Unload(True),并来确保对象不被复制,具体做法是:

  1. 在应用程序的生命周期内定义一个合适的节点,并在此期间卸载不需要的AssetBundle,例如在关卡切换或加载屏幕期间。这是最简单和最常见的选择。
  2. 维护单个对象的引用计数,并仅当所有组成对象都未使用时才卸载AssetBundle。这允许应用程序在不重复内存的情况下卸载和重新加载单个对象

另一个问题是:如果AssetBundle卸载后重新加载一个对象,重新加载将失败,该对象将以(Missing)对象的形式出现在Unity编辑器的层次结构中,材质会呈现洋红色。主要会发生在Unity失去并试图恢复对其图形上下文的控制时,例如当移动应用程序被挂起或用户锁定他们的PC时

加载AssetBundles

AssetBundles可以通过四个不同的API进行加载。但受限于两个标准,这四个API的行为是不同的。两个标准如下:

  • AssetBundles的压缩方式:LZMA、LZ4、还是未压缩的。
  • AssetBundles的加载平台。

而四个API分别是:

  • AssetBundle.LoadFromMemory(Async optional)不要使用这个API,因为他会冗余多次
  • AssetBundle.LoadFromFile(Async optional):用于从本地存储(如硬盘或SD卡)加载未压缩或LZ4压缩格式的AssetBundle。
  • UnityWebRequest's DownloadHandlerAssetBundle
  • WWW.LoadFromCacheOrDownload (on Unity 5.6 or older)

一般来说,只要有可能,就应该使用AssetBundle.LoadFromFile。这个API在速度、磁盘使用和运行时内存使用方面是最有效的。

从AssetBundles中加载Assets

Unity提供了三个不同的API从AssetBundles加载UnityEngine.Objects,这些API都绑定到AssetBundle对象上,并且这些API具有同步和异步变体,这些API的同步版本总是比异步版本快至少一个帧(因为异步版本为了确保异步,都至少延迟了1帧):

  • LoadAsset (LoadAssetAsync)
  • LoadAllAssets (LoadAllAssetsAsync)
  • LoadAssetWithSubAssets (LoadAssetWithSubAssetsAsync)

加载多个独立的UnityEngine.Objects时应使用LoadAllAsset。并且只有在需要加载AssetBundle中的大多数或所有对象时,才应该使用它。LoadAllAsset比对LoadAsset的多个单独调用略快一些

Object加载是在主线程上执行,但数据从工作线程上的存储中读取。任何不触碰Unity系统中线程敏感部分(脚本、图形)的工作都将在工作线程上转换。例如,VBO将从网格创建,纹理将被解压等等。当一个Object完成加载时,它的Awake回调将被调用,该对象的其余部分将在下一个帧中对UnityEngine可用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows下载redis、windows安装redis、windows启动redis

一、下载并解压 下载网址:https://github.com/tporadowski/redis/releases 下载后解压并重命名文件夹为redis 二、打开redis文件夹 找到redis.windows.conf配置文件,作如下修改 protected-mode no // 将yes改为no 部分配置信息说明 bind 127.0.…

Ubuntu服务器下安装FastDFS及nginx配置访问等问题记录

Ubuntu服务器下安装FastDFS及nginx配置访问下载对应包编译环境包解压环境配置配置nginx模块和安装nginx来进行访问该图片下载对应包 下载方式一:直接使用 wget 下载,如果太慢,可以去github下载,然后上传到服务器上即可。 wget -…

Mybatis三大执行器介绍

Mybatis三大执行器介绍Mybatis相关全览一、执行器介绍执行器的选择入口设置执行器两种方式全局配置(不建议)局部设置(建议)二、三个执行器区别SimpleExecutorReuseExecutorBatchExecutor总结三、效率测试四、平时开发使用本文用的…

老机器摇身一变成局域网下低配服务器,并稳定访问GitHub

老机器摇身一变成局域网下低配服务器,并稳定访问GitHub 搭建场景: 问题背景: 最近用腾讯云服务器访问GitHub经常挂,试了很多解决方案如换host文件ip等办法提速效果都不明显。后来想通过腾讯云服务器实现kexueshangwang&#xff0…

wechaty-puppet-whatsapp的uos协议使用中常见问题

常见问题 常见问题解决基本方案 先检查node版本是否大于16确认npm已经配置好淘宝源存在package-lock.json文件先删除删除node_modules后重新执行npm install 或cnpm install配置文件是否按照要求设置本地网络是否存在限制,是否开启了代理服务本地防火墙是否关闭 我…

智能微型断路器的功能有哪些?和网关搭配的作用在哪?

安科瑞 华楠 ASCB1 系列智能微型断路器是安科瑞电气股份有限公司 全新推出的智慧用电产品,产品由智能微型断路器与智 能网关两部分组成,可用于对用电线路的关键电气因 素,如电压、电流、功率、温度、漏电、能耗等进行实 时监测,具…

[附源码]java毕业设计剧本杀门店管理系统-

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

三种常规用的矢量网络分析仪系统误差校准方法

我们在使用矢量网络分析仪是会发现测量出来的数据有误差,要想矫正,首先我我们要知道矢量网络分析仪的误差来源有哪些?主要有以下三个方面:漂移误差、随机误差、系统误差 1、漂移误差:是由于进行校准之后仪器或测试系统性能发生变…

网络基础--笔记

文章目录一、网络基础1.1 二层交换网络1.1.1 HUB1.1.2 Switch1.1. 3 ARP协议1.1. 4 VLAN IEEE802.1Q协议1.1. 5 链路接口类型1.1. 6 链路聚合模式1.1. 7 链路聚合的类型1.1. 8 STP 生成树协议 (Spanning Tree protocol) IEEE 802.1D1.2 三层路由网络1.2.…

HDLC协议的特点及功能,让你一看就会

一 HDLC概述 1.1 HDLC的发展历史 高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输数据、面向比特的数据链路层协议,它是由国际标准化组织(ISO)根据IBM公司的SDLC(SynchronousData Link Control)协议扩展开发而成的.其最…

[附源码]Python计算机毕业设计《数据库系统原理》在线学习平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

2.1 Vision-Language Pre-Training for Multimodal Aspect-Based Sentiment Analysis

Vision-Language Pre-Training for Multimodal Aspect-Based Sentiment Analysis 1、基本信息 作者:Yan Ling, Jianfei Yu, Rui Xia 会议:ACL 2022 单位:南京理工大学 2、主要框架 任务:Multimodal Aspect-Based Sentiment …

FITC-PEG-N3,Fluorescein-PEG-Azide,荧光素-聚乙二醇-叠氮可用于点击化学

1、名称 英文:Fluorescein-PEG-Azide,FITC-PEG-N3 中文:荧光素-聚乙二醇-叠氮 2、CAS编号:N/A 3、所属分类:Azide PEG Fluorescent PEG 4、分子量:可定制,荧光素-peg 20000-叠氮/Fluoresce…

大数据常见面试题Hadoop篇(3)

前几篇地址: 大数据常见面试题 Hadoop篇(1)_后季暖的博客-CSDN博客 大数据常见面试题 Hadoop篇(2)_后季暖的博客-CSDN博客 目录 36.HDFS文件能否直接删除或则修改? 37.谈谈hdfs中的block、package、chu…

java毕业设计——基于java+MMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文+程序源码)——蚁群算法路由选择可视化动态模拟

基于javaMMAS的蚁群算法路由选择可视化动态模拟设计与实现(毕业论文程序源码) 大家好,今天给大家介绍基于javaMMAS的蚁群算法路由选择可视化动态模拟设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。 文章目录&#…

java项目-第143期ssm母婴用品网站_java毕业设计_计算机毕业设计

java项目-第143期ssm母婴用品网站_java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm母婴用品网站》 该项目分为2个角色,管理员和用户。 用户可以浏览前台,包含功能有: 首页、商品信息、论坛信息、新闻资讯 、留言反馈、购物…

Chapter3 Pytorch与机器学习有关函数(二)

目录 3.4 tensor中的填充操作 3.4.1 tensor.full 3.5 pytorch中模型的保存/加载/并行化 3.6 导数、方向导数、偏导数 3.6.1 重要概念 3.6.1.1 概念 3.6.1 如何计算梯度 3.6.2 torch.autograd.Function 3.7 pytorch与nn库 3.7.1 nn库介绍(介绍、在后续会详…

干货|爱奇艺短视频多模态分类技术解析

简介 近年来,短视频领域一直广受关注,且发展迅速。每天有大量UGC短视频被生产、分发和消费,为生产系统带来了巨大的压力,其中的难点之一就是为每个短视频快速、准确地打上标签。为了解决人工编辑的时效和积压问题,自动化标签技术成为各大内容领域公司都非常关注的关键课题…

[附源码]java毕业设计流浪宠物免费领养系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Python:突然发现好看壁纸的都在某度图片库了,这还爬什么壁纸网站?

用Python把最大的爬虫爬一遍前言开发环境 & 第三方模块代码展示效果展示最后前言 最近忙着又没更新,这不抽出时间了,赶紧来更新! 众所周知,某度本身就是最大的爬虫脚本,那么纯纯的去某个网站找壁纸,还…