首页 > 其他分享 >为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件

为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件

时间:2023-07-04 11:04:23浏览次数:53  
标签:文件 社区 Catalog 更新 mainfest Unity AssetBundle UWA

1)为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件
​2)Addressable热更,断点续传问题
3)在线性空间,使用后处理解决UI混合问题


这是第341篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。

UWA社区主页:community.uwa4d.com
UWA QQ群:465082844

AssetBundle

Q:为什么Unity使用AssetBundle热更的时候要剔除掉.mainfest文件?

A:在使用AssetBundle热更时,Unity会将每个AssetBundle的依赖关系和元数据保存在一个名为文件的文件中。

这个文件描述了AssetBundle的版本、包含哪些资源以及它们之间的依赖关系。

.mainfest文件在构建APK或发布AssetBundle包时会被打包进去,无法通过热更方式更新,在进行AssetBundle热更时,如果不剔除掉文件,则新下载的AssetBundle的文件会覆盖原来的文件,导致所有已经下载的AssetBundle都需要重新下载,因为它们的依赖关系信息已经丢失。因此,需要在进行AssetBundle热更时将文件从打包列表中剔除,以避免出现这种情况。

感谢曼华@UWA问答社区提供了回答


Network

Q:利用Addressable进行热更,采用Disable Catalog Update on StartUp方式,当更新进度没有完成时杀掉游戏,再重新启动游戏,此时catalogs.Count已经等于0,并不会在此触发更新,但其实还有部分资源未更新到,这种情况下应该怎么处理?

1. 首先不能放玩家进入游戏,因为资源不匹配。
2. 触发游戏重新更新,此时catalogs.Count=0,并不会更新资源。

  • 这种情况下是否可以使用Addressables.ClearResourceLocators()和 Caching.ClearCache()清理缓存和已经下载好的资源,再次触发热更,这时catalogs.Count 应该是不等于0的吧?

不知道大家都是怎么处理:资源更新一半杀掉游戏,重新登录游戏?

另外,AddressableAssetSetting->Catalog->Player Version Override这个设置使用的是默认的time stamp还是指定了一个版本号?我这里指定了一个固定版本,导致catalogs.Count=1,永远只是更新这次和母包的差异,比如中间已经有几次热更了,会把中间几次的热更给丢弃。针对这个问题,更新策略是怎么样的?

A1:不使用Addressables.UpdateCatalogs(),自己去服务器上下载Catalog文件,如果下载到一半了,取消,不修改版本号。下次进来接着去服务器下载Catalog文件。然后自己下载的Catalog文件可以用Addressables.LoadContentCatalogAsync()加载,然后得到IResourceLocator的所有Key,把所有Key传入下载列表中进行下载资源文件。

感谢liu@UWA问答社区提供了回答

A2:进入游戏第一次Check,之后的那些异步操作都用缓存保存起来即可。

感谢京一@UWA问答社区提供了回答

A3:第一,你用Disable Catalog Update on StartUp方式启动,就是默认不更新Catalog,但是在走后面更新的时候,Catalog其实已经更新完了,再调用API更新Catalog自然没有了。这时只要去GetDownloadSize然后直接更资源就行了。

Catalog的更新和资源更新是两个阶段。最好分开管理。

第二,AA其实只比较资源的Hash,因此没有版本号概念,所以不存在中间版本,永远是最新版本和母包。这个PlayerVersionOverride指你打Player的那个版本号,一般是更新母包时才递增。这种做法可以保证不管玩家手里是哪份资源,都能更到最新的,并且避免中间的逐版本升级流程。

再有,Keys基本还是需要自己去管理,比如你自己管理了20个Keys,然后调用Addressables.UpdateCatalogs()后告诉你其中5个更新了。那么如果你立即调用GetDownloadSizeAsync和DownloadDependenciesAsync,可以马上传入这5个Key。另外一种情况可能你这一次游戏中UpdateCatalogs获得5个更新。但是要到下一次启动游戏才调用GetDownloadSizeAsync和DownloadDependenciesAsync,那你可以把这20个Keys都传进去。

感谢黄程@UWA问答社区提供了回答


UI

Q:线性空间,美术资源是在Gamma空间制作的,参考该方法:
https://blog.csdn.net/euphorias/article/details/125558348

UI效果是对了,但是明显整个界面变暗了,请问大家是如何解决这个问题的?

 

 

 

根据网上的教程,改了下,多了4个Blit,是否还有性能优化空间?

 

 

A1:如果用URP,可以修改URP源码,场景上使用线性空间,UI使用Gamma空间。

Git上有对应开源代码,适用的Unity版本不同,也都有点小bug需要修复:
UI_RenderPipelineInLinearSpace
URP-12-GammaUIAndSplitResolution

感谢邹彬@UWA问答社区提供了回答

A2:如果3D相机的Renderer上有后处理,并且能改URP的管线,在UberPost的Frag最后直接做LineraToGamma,可能就不用加Pass。

而且,看起来这个后处理脚本是挂在了UIRenderer上,所以会影响到整体的颜色,可以试试在ForwardRenderer渲染结束后,UI绘制之前,对颜色做一次pow(color, 0.45)也就是LinearToGamma来中和最后的UIRenderer后处理的pow(color,2.2)。

感谢范世青@UWA问答社区提供了回答

A3:针对“多了4个Blit,是否还有性能优化空间”问题。直接cmd.Blit(_source, _source, _material);就可以了。

感谢题主黄大仙@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844

标签:文件,社区,Catalog,更新,mainfest,Unity,AssetBundle,UWA
From: https://www.cnblogs.com/uwatech/p/17525081.html

相关文章

  • Unity3D:工具栏
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生工具栏在UnityEditor顶部可以看到工具栏。工具栏不是窗口,是Unity界面中唯一无法重新排列的部分。有关场景视图中的其他工具,请参阅叠加。工具栏显示在Editor顶部控制:描述:从帐户下拉菜单访问您的......
  • Unity Visual Studio 常用的自带配置以及快捷键
    ​完整文档->UnityVisualStudio常用的自带配置以及快捷键一、内联提示 不等号字体 快速创建新文件快捷键:Ctrl+shift+A 选择下一项与多行光标Alt+左键功能增强需安装插件Select Next Occurrence 拆分窗口窗口右上角 折叠大纲​......
  • Unity3D高级编程主程手记 学习笔记四:用户界面
     用户界面(UI)是游戏项目中重要的组成部分。面对一个从零开始的项目,首先要选择选用哪个UI系统作为主框架。主流公司里最常用的UI系统有:NGUI,UGUI,除此之外还有部分公司使用FairyGUI,DoozyUI。UGUI的运行原理UGUI是在3D网格下构建起来的UI系统,它的每一个可显示元素都是通过3D......
  • Unity___AB包
    AB包一些压缩文件,模型,预制体,图片....Resources和AB包区别Resources打包定死,只读,无法修改存储位置自定义,压缩方式,后期更新减少包体大小热更新1.资源2.脚本热更新过程获取资源地址通过资源对比文件,检测哪些需要热更新,下载AB包生成的文件AB包文件资源文件manif......
  • Unity 打包发布到 Web 相关配置
    IIS发布时,web.config配置文件如下所示:<?xmlversion="1.0"encoding="UTF-8"?><configuration><system.webServer><staticContent><mimeMapfileExtension=".data"mimeType="multipar......
  • yum安装mysql时出现Public key for mysql-community-common-5.7.42-1.el7.x86_64.rpm
    问题描述:yum安装mysql时出现Publickeyformysql-community-common-5.7.42-1.el7.x86_64.rpmisnotinstalled告警,如下所示:数据库:mysql5.7.42系统:rhel7.31、问题重现[root@leo-mysql-master~]#yuminstall-ymysql-community-serverLoadedplugins:langpacks,product......
  • SQLite4Unity3d unity游戏数据库
      SQLite4Unity3d是一种基于sqlite-net进行封装的unity包,适用在iOS,Mac,Android和Windows项目中工作,适用于中大型游戏 项目架构传统unity序列化数据共有几种方案,包括使用本地持久化类PlayerPrefs,使用Json方法、使用XMl方法,但以上几种方案有使用上限制,修改自由化,规模化使用......
  • Unity3D:专属 Inspector
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生专属Inspector专属Inspector是专门用于特定游戏对象、Unity组件或资源的Inspector窗口。它始终显示为其打开的项目的属性,即使您在场景或项目中选择了其他内容。专属Inspector的工作方式与常规Inspecto......
  • Unity如何判断两物体相交
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclasscubemanger5:MonoBehaviour{publicGameObjectcubePrefab;publicintnumCubes;publicfloatminSize;publicfloatmaxSize;publicGameObject......
  • Unity3D:Hierarchy 窗口
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生Hierarchy窗口打开Unity新项目时的默认Hierarchy窗口视图Hierarchy 窗口显示场景中的每个游戏对象,如模型、摄像机或预制件。可以使用Hierarchy窗口对场景中使用的游戏对象进行排序和分组。在Scene视......