技术分享连载(二十七)

技术分享连载(二十七)

本期话题:Default—Particle存在大量冗余、点击进入游戏的时间和Resource目录大小有关吗、如何减少游戏中Mono内存占用的大小...这是侑虎科技第80篇原创文章,欢迎转发分享,未经作者授权请勿转载。同时如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

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


资源管理

Q1:我在UWA上提交了资源检测,资源打的是依赖包,报告显示Default—Particle这个资源存在大量冗余,这个是正常的吗?

请输入图片描述

Default—Particle 这个是粒子系统的默认资源。如果使用的是默认的粒子系统,没有对Material进行修改,且每个粒子系统都是打一个AssetBundle文件的话,那么该冗余问题是正常的。对此,我们建议开发团队把下图中默认的Material换成自己的资源,不使用Built-in资源,这样通过依赖关系打包,就不会出现该资源冗余的问题了。
请输入图片描述


资源管理

Q2:从点击应用到出现游戏画面,这个时间长短是不是和Resource目录大小有关系?

从点击应用到首次出现应用画面,其加载时间主要与两方面相关:

  1. Resources文件夹中的资源数量。在游戏启动时,Unity引擎会为Resources文件夹下的资源建立一个查找树来存放与其对应的索引,便于后续资源的加载。一般来说,Resouces文件夹下资源数量越多,其构建时间越长,应用的启动也就越慢;

  2. 首场景的资源加载和相关代码的初始化工作。如果首场景的资源量较多,其脚本初始化的任务较重,则应用的启动时间也会越慢。


性能优化

Q3:Unity 的 TimeManager Time默认是0.02。我们有个NetConnectionManager脚本使用了FixedUpdate,这个脚本是用来解析网络协议的,我尝试修改Time的值为0.01 ,感觉游戏似乎提高了运行的效率,具体表现在减少了一些卡顿问题的延迟,提高了调用的频率,但是发热和耗电问题似乎会变得严重。关于TimeManager设置,你们有什么建议吗?

将TimeManager中的Time从0.02降低到0.01,其本质是将FixedUpdate的调用频率从默认的50次/秒提升为100次/秒。这一操作确实很可能带来画面表现的流畅感,但同样增加了一倍的网络IO,其本身会占用更大的性能开销,从而造成设备发热。一般来说,除对于网络同步非常高的游戏外,TimeManager中Time按照默认的0.02设置即可。


内存管理

Q4:有没有办法可以减少游戏中Mono内存占用的大小?我现在读完游戏表以后就占用了60MB,我看其他游戏读完配置表也才10MB左右,这个是怎么做到的呀?

如果刚进入游戏后,Mono堆内存就达到了60MB,那么你的游戏项目极有可能在一开始加载了一个非常大的配置表。对此,我们建议出现该问题的研发团队对配置文件的初始加载进行详细检测,查看是否可以精简配置文件信息。如果不行,则尝试将配置文件拆散,按需加载,从而降低Mono内存上升过快问题发生的概率。


资源管理

Q5:我用的是NGUI,本来已经打包图集了,输出时候是不是就不用理会那些原始2D Sprite图 ?粒子贴图需要Packing Tag吗?

在NGUI中使用Atlas后,原纹理是不需要进行打包或进行其他特殊处理的,因为理论上这些资源在运行时已不再需要。粒子系统所使用的纹理并不是Sprite类型的,因此不需要设置Packing Tag。


资源管理

Q6:请教个问题,我用Unity 5 里提供的Sprite Packer把A.png,B.png打进一张图集,在运行时我怎么方便地加载这两张图呢?使用场景:某个Image控件根据不同的条件显示A,或者显示B。

目前通常是在脚本序列化信息中保留这两个Sprite的引用,在切换时直接通过对Image.sprite进行赋值来切换。


【技术分享】是UWA推出的技术交流栏目,我们会定期将开发团队中反馈的常见问题加以总结并梳理在此,以供大家参考。

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