首页 > 其他分享 >Unity 利用Cache实现边下边玩

Unity 利用Cache实现边下边玩

时间:2024-06-15 18:10:06浏览次数:19  
标签:缓存 hash Cache crc Unity AssetBundle 下边 资源

现在手机游戏的常规更新方案都是在启动时下载所有资源更新,游戏质量高的、用户粘性大的有底气,先安装2个G,启动再更新2个G,文件小了玩家还觉得品质不行不想玩。
最近在做微信、抖音小游戏,使用他们提供的资源缓存方案,现在要转成Android APP, 也想用这种边下边玩的机制把首包做小。
其实很简单,直接用Unity内部的Caching机制即可,但是因为没怎么接触过,一开始用的就是那种启动时下载资源更新的方案,反而绕了一些弯路。

资源方案:AssetBundle (现在推Addressable的比较多,解决了AssetBundle难以处理的一些问题,但是比较久的项目肯定都对AssetBundle进行了相应的封装来处理这些问题,没有本质区别)

1. 打包AssetBundle时获取hash

调用自己封装的SBP ContentPipeline.BuildAssetBundles(), 遍历IBundleBuildResults.BundleInfos可以取到对应的hash和crc,
如果用旧的BuildPipeline.BuildAssetBundles(), 也可以通过manifest取到对应的hash,但如果想拿到crc,需要手动传参数进去。
另外,需要设置打包压缩格式为LZ4。默认的LZMA会重新压缩成LZ4,造成比较明显的卡顿。

2. 加载AB时的缓存机制

  var uwr = UnityWebRequestAssetBundle.GetAssetBundle(url, hash, crc);

怎么样,是不是非常简单?只需要填上hash参数,就可以依靠Unity内部机制实现边下边玩。hash也不一定是hash,实际作用只是一个版本号,只要请求的时候对应的版本的资源在缓存中存在,就会下载新的,否则就读缓存中的,如果不填这个参数就是默认值0)
crc参数是用来校验的,如果AB和调用时的crc对不上,uwr.downloadHandler.error会表现出来,并且取不到资源。默认值0表示不进行校验

3. 优缺点

优点自然是非常简单,改一下就能用,如果要部分资源放进包里,部分资源边下边玩,改一下判断就行。
缺点是没法精细操作,资源出问题了最简单粗暴的就是直接Caching.ClearCache,没有办法对单个文件进行完整性检查。

标签:缓存,hash,Cache,crc,Unity,AssetBundle,下边,资源
From: https://www.cnblogs.com/lunoctis/p/18249588

相关文章

  • 关于Unity四种合批技术详解
    文章目录一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批二.动态合批(DynamicBatching)1.启用动态合批2.合批规则3.举例说明4.使用限制三.GPUInstancing1.启用GPUInstancing2.启用限制3.举例说明......
  • 【Unity】随手记录——背景随字数增长而加长(无代码)
    前记如果是以前的我,可能要思考一下代码要怎么写,但是现在我发现,如果上班不用写代码就可以完成功能,那真的很快乐。具体操作按照惯例,先说具体操作,然后再大概介绍一下用到的东西从UGUI创建一个图片作为父物体,然后挂上HorizontalLayoutGroup、ContentSizeFitter之后......
  • 【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
    最终效果前言欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第29篇中,我们将探索如何用unity复刻经典游戏《愤怒的小鸟》,我会附带项目源码,以便你更好理解它。简单搭建环境修改图片配置并切图,修改最大尺寸是为了让图......
  • Chrome使用回退,出现表单提交失败,ERR_CACHE_MISS问题
    是什么、为什么、怎么办"ERR_CACHE_MISS"错误通常发生在你使用浏览器的“返回”按钮时。这种错误与浏览器处理缓存数据的方式有关,特别是在处理表单和POST请求时。常见原因表单重新提交当你导航回包含表单提交的页面(通常是POST请求)时,Chrome可能会提示你重新提......
  • BGP路由优选实验(包含as策略,Community属性等)
    实验背景实验目的1.使用AS_PATH属性,确保R4通过R3到达192.168.11.0/242.使用LOCAL_PREF属性,确保R1通过R2到达192.168.1.0/243.使用MED属性,确认R4通过R3到达192.168.12.0/244.使用LOCAL_PREF属性,确保R1通过R3到达192.168.2.0/245.使用AS策略,AS500不接受任何始发于AS1......
  • 面试专区|【31道Memcache高频题整理(附答案背诵版)】
    阐述什么是Memcache?它有什么作用?Memcache是一个分布式的高速缓存系统,由LiveJournal的BradFitzpatrick开发,被许多网站用于提升访问速度,尤其是对于一些大型的、需要频繁访问数据库的网站来说,其效果十分显著。Memcache的作用主要在于通过在内存中缓存数据和对象,减少读取数......
  • Unity Camera组件ClearFlags属性介绍以及区分UI摄像机和角色摄像机
    在Unity中,Camera.clearFlags属性用于定义相机在渲染场景之前如何清除屏幕。这个属性有几个不同的选项,每个选项都会以不同的方式清除屏幕。具体选项如下:Skybox:如果相机有分配的天空盒(Skybox),在渲染场景之前将用天空盒来清除屏幕。如果没有分配天空盒,则使用纯色来清除屏幕,颜色......
  • mongodb的安装使用、mongodb与redis,memcache,mysql的区别优缺点 以及 好用的MongoDB
    一、mongodb的安装使用、与redis,memcache,mysql的区别优缺点    MongoDB是一个介于关系数据库和非关系数据库之间的基于分布式文件存储的数据库。是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数......
  • Unity图集
    概述相信在同学们学习过程中,在UI的的使用时候一定经常听说过图集的概念。Unity有UI的组件,有同学们好奇,那为什么还要使用图集呢?这就需要提到一个性能优化的问题了,因为过多的UI图片,会大幅增加DrawCall(绘制调用),Draw是什么呢,就是GPU对CPU的一次指令的绘制指令的调用,CPU将顶点,材......
  • Unity 2023/Unity 6编辑器文字糊成一片的解决方案
    这是从2023.1开始就有的问题了。本质原因是Unity不知道哪个天才决定的在编辑器文字上使用了SDF渲染。2023.1因为缺乏选项导致几乎不可用;2023.2加了一个锐度选项;后来在论坛里被众人喷了好久之后(很荣幸在这其中出了一份力......