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空间。<br/>
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