关于ab:为什么Unity使用AssetBundle热更的时候要剔除掉mainfest文件
1)为什么Unity应用AssetBundle热更的时候要剔除掉.mainfest文件2)Addressable热更,断点续传问题3)在线性空间,应用后处理解决UI混合问题 这是第341篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:465082844 AssetBundleQ:为什么Unity应用AssetBundle热更的时候要剔除掉.mainfest文件? A:在应用AssetBundle热更时,Unity会将每个AssetBundle的依赖关系和元数据保留在一个名为文件的文件中。 这个文件形容了AssetBundle的版本、蕴含哪些资源以及它们之间的依赖关系。 .mainfest文件在构建APK或公布AssetBundle包时会被打包进去,无奈通过热更形式更新,在进行AssetBundle热更时,如果不剔除掉文件,则新下载的AssetBundle的文件会笼罩原来的文件,导致所有曾经下载的AssetBundle都须要从新下载,因为它们的依赖关系信息曾经失落。因而,须要在进行AssetBundle热更时将文件从打包列表中剔除,以避免出现这种状况。 感激曼华@UWA问答社区提供了答复 NetworkQ:利用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问答社区提供了答复 UIQ:线性空间,美术资源是在Gamma空间制作的,参考该办法:https://blog.csdn.net/euphorias/article/details/125558348 UI成果是对了,然而显著整个界面变暗了,请问大家是如何解决这个问题的? 依据网上的教程,改了下,多了4个Blit,是否还有性能优化空间? A1:如果用URP,能够批改URP源码,场景上应用线性空间,UI应用Gamma空间。<br/>Git上有对应开源代码,实用的Unity版本不同,也都有点小bug须要修复:UI_RenderPipelineInLinearSpaceURP-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.comUWA社区:community.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:465082844