技术分享连载(二十九)

技术分享连载(二十九)

本期话题:如何处理增加字体,内存变大的问题、如何优化CPU耗时很高...精选5个资源优化问题,建议阅读时间5分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

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


资源管理

Q1:我们现在为了美观,需要同时使用2套字体。但是每增加一套字体,就会内存增加50MB左右。请问你们在优化其他Unity游戏时,怎么处理类似情况的?

如果美术字不多的话,建议使用单独的字体贴图来进行实现,从而来达到特定美术字显示的效果;如果美术字较多的话,那么仅能建议使用另外一个套字体来进行实现。一般来说,字体的内存量应该也是完全可以控制在10MB以下的。

开发者可以直接在Unity Profiler中查看字体的内存占用,也可以通过UWA网站上测评报告中的具体资源信息页面查看对应的字体资源使用情况。
请输入图片描述


资源管理

Q2:我在UWA测评报告中看到该项CPU耗时很高,请问这是什么引起的?可以优化掉吗?
请输入图片描述

图中红色框中选项说明该项目在UI界面上文字较多,进而在Instantiate或Active时带来了较高的字体创建耗时;
蓝色框中选项,则说明了项目运行时存在大量的Log输出,我们建议尽可能在项目发布后将非关键Log信息进行屏蔽。如果该Log是系统打出的Warning或Error Log,则建议在“项目运行日志”界面通过Log堆栈对其进行详细检测和修复。

我们非常希望看到大家的项目在“项目运行日志”界面能够达到下图中的效果,即除了UWA的Start Log外,没有任何其他消息。
请输入图片描述


资源管理

Q3:请问这个Loading.UpdatePreloading是什么东西,为什么会突然那么高?一般情况下有没有什么优化的办法?
请输入图片描述

这是Unity引擎最主要的加载函数。该项一般在切换场景时或主动动态加载资源时较大。 一般来说,加载资源越多、越复杂,则其反映的Loading.UpdatePreloading耗时则越大。

优化之前,必须先定位该函数的CPU占用瓶颈。下图则为我们的案例项目,Loading.UpdatePreloading函数在UWA测评报告中的总体CPU分配情况。通过这个堆栈信息,开发团队就可以对函数的耗时分配一目了然,从而有的放矢地进行优化。
请输入图片描述


UI输入

Q4:请问,Canvas里的东西移出了屏幕后,DrawCall没降低,那么它还会每帧去绘制吗?

DrawCall没降低,说明CPU依然将这部分的网格提交到了GPU。因此虽然UI元素已经不可见,但其CPU开销(包括切换渲染状态,提交VBO等)依然是在的,只是对GPU不会造成明显影响,因为最终并没有进行像素的渲染。


资源管理

Q5:我在UWA报告中看到大量的n/a资源,其格式的高度和宽度等信息都无法获取,并且存在大量重复,请问我该如何定位这些文件?能否优化解决呢?
请输入图片描述

图中n/a资源是我们在项目运行时检测到的无名称资源,一般来说,该类型资源并非Asset文件夹中的美术资源,而是项目通过脚本动态生成的资源,比如new Mesh、new Texture等操作,即会生成这种类型的无名称资源。

对此,我们建议研发团队详细检测逻辑代码/第三方插件中诸如New Mesh/Textue等此类操作,同时,在脚本动态生成该类资源后,为其赋上一个名字,这样即可在后续测试中看到对应名称的资源使用情况。

今天的分享就到这里。也欢迎热爱进步的你加入UWA的QQ群(793972859),也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。 比起闭门造车,我们更乐意与大家各抒己见,畅所欲言;比起形而上的泛泛而谈,我们更乐意与大家直击痛点,对症下药。