如何远程更新Addressable随包打进的游戏资源

时间:2024-03-10 19:15:58

1)如何远程更新Addressable随包打进的游戏资源
​2)Unity内存机制与安卓内存机制的关系
3)UWA报告中的GPU渲染信息统计
4)如何采样不同纹理压缩格式的时间
5)如何去掉每帧的GC


这是第211篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Addressable

Q:我们新项目想用Addressable Asset System。我这几天看了一下,有个问题想请教一下:AAS通过Build and Load Paths设置local/remote决定Group中的资源随包/远端下载。那么我想在远端更新local方式的资源(即随包打进StreamingAssets中的资源)该怎么操作?

A:Local打包方式的Group设置Cannot Change Post Release,两个属性bundlename设置成FileName,取消bundle的CRC,这样再Check/Build之后就可以做到增量更新了。Addressable会把改变的部分生成到一个新的Group中,这个Group会默认设置成remotebuild/load 。这样就做到增量更新了。

感谢题主柚子爱爸爸@UWA问答社区提供了回答


Memory

Q:Unity内存机制与安卓自身的内存机制有什么关系?我目前的理解是安卓操作系统基于Linux内核,所以自己有本身的内存管理机制;而java VM是为了让一些应用可以运行在安卓平台上而建立的一种跨平台机制。相当于在安卓系统上开了一个虚拟机,应用运行在虚拟机的环境中。同理,Mono和IL2CPP也是另一种虚拟机,也会运行在安卓操作系统上,但是也有着自己本身虚拟机的内存管理机制,也就是说Unity的内存管理机制实际上就是Mono或者IL2CPP的内存管理机制。

想了解下我的理解对吗?虚拟机的管理机制和安卓系统的管理机制有什么样的关联呢?任何相关的回答都不胜感激,谢谢!

A:可以参考:

《浅谈Unity内存管理》——视频
https://www.bilibili.com/video/av79798486/
《浅谈Unity内存管理》——猫冬夏的笔记
https://www.notion.so/Unity-f79bb1d4ccfc483fbd8f8eb859ae55fe

感谢俞顺捷@UWA问答社区提供了回答


Rendering

Q:URP项目GPU渲染信息统计问题:看情况是统计到逻辑代码里了,这个后面会区分出来吗?

 

 

A:CPU耗时和GPU耗时是完全不同的两码事。虽然最终渲染是在GPU端进行,但是CPU端也需要做很多事情的,比如提交Draw Call。以不透明渲染来说,常见的是Render.Mesh,Batch.DrawStatic这些Draw Call的提交,再比如MeshSkinning.Render,Culling等,这些都算在Camera.Render的耗时里面。

在使用了SRP的情况下,与Camera.Render相对应的函数叫RenderPipelineManager.DoRenderLoop_Internal(),这里面的耗时也都是CPU端的耗时,建议题主通过UWA线上的真人真机测评服务来查看更为具体的耗时分配。

题主截图中的GPU耗时为0,可能是因为使用了Vulkan,也可能是因为某些GPU型号问题(一般出现在华为手机上),但这个跟CPU的耗时都没有关系的,也并不是GPU的耗时统计到CPU逻辑代码里面去了。

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


Texture

Q:有什么方法可以知道采样不同纹理压缩格式的时间吗?想了解下对于ETC2 ETC、ASTC采样所消耗的时间,能够具体量化吗?

A:我理解只要是硬件原生支持的贴图格式,采样的时长应该没什么差别吧,毕竟都是硬件解压到显存中进行。

更可能产生差异的是大小不同导致的传输时间和命中率上的差异,比如ASTC通常优于RGBA的原因就是对于带宽占用小,Cache命中率高。

可能整体看更好,当然如果要去追究采样消耗,可能通过一些GPU Profile统计Sampe的消耗会有些价值。

感谢贾伟昊@UWA问答社区提供了回答


Mono

Q:scriptableruntimereflectionsystemwrapper每帧都有9B GC,如何去掉呢?

 

A1:可以参考:
https://unity3d.com/cn/unity/whats-new/2018.3.8

Scripting: Removed allocation in every frame from ScriptableRuntimeReflectionSystemWrapper.TickRealtimeProbes. (1097039)

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

A2:一般为SRP中一些逻辑代码所分配的堆内存占用,可能是Command buffer的切换代码或者其他。可以通过Deep Profiler方式在Editor中定位具体是什么函数。

该问答由UWA提供

 

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)