1)如何远程更新Addressable随包打进的游戏资源
2)Unity内存机制与安卓内存机制的关系
3)UWA报告中的GPU渲染信息统计
4)如何采样不同纹理压缩格式的时间
5)如何去掉每帧的GC
这是第211篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。
UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)
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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ee9d9725d07d80acd26241c
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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f02890dc6123f2e0df5b3ae
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问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5f02e4a2ade17d6115427bb2
Q:有什么方法可以知道采样不同纹理压缩格式的时间吗?想了解下对于ETC2 ETC、ASTC采样所消耗的时间,能够具体量化吗?
A:我理解只要是硬件原生支持的贴图格式,采样的时长应该没什么差别吧,毕竟都是硬件解压到显存中进行。
更可能产生差异的是大小不同导致的传输时间和命中率上的差异,比如ASTC通常优于RGBA的原因就是对于带宽占用小,Cache命中率高。
可能整体看更好,当然如果要去追究采样消耗,可能通过一些GPU Profile统计Sampe的消耗会有些价值。
感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5ee19dd2713e187c947575d9
Q:scriptableruntimereflectionsystemwrapper每帧都有9B GC,如何去掉呢?
A1:可以参考:
https://unity3d.com/cn/unity/whats-new/2018.3.8Scripting: Removed allocation in every frame from ScriptableRuntimeReflectionSystemWrapper.TickRealtimeProbes. (1097039)
感谢littlesome@UWA问答社区提供了回答
A2:一般为SRP中一些逻辑代码所分配的堆内存占用,可能是Command buffer的切换代码或者其他。可以通过Deep Profiler方式在Editor中定位具体是什么函数。
该问答由UWA提供,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/5efff0412e944561c84e0001
封面图来源于网络
今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。
官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)