技术分享连载(七十)

简介:

物理模块

Q1:在游戏里没有使用物理(Physics)相关功能时,怎么把物理相关的性能消耗降到最低?
我们游戏里完全没用到物理相关的功能,只是因为需要做点击碰撞检测,所以GameObject上需要加上BoxCollider组件,但是Profile时会时不时看到Physics.Processing的消耗有点高,也不算非常高,但是理论上如果完全没用物理相关功能的话,总感觉这部分消耗是可以完全干掉的,对于Profiler中Physics模块中给的几个统计不太清楚是怎么计算的,目前使用的Unity版本是5.3.6f1版本。

请输入图片描述

请输入图片描述

就我们目前的分析来看,在Unity5.4版本之前,物理模块是会每帧都运行的。而在Unity5.4版本之后,如果没有使用任何物理相关的功能时(Rigidbody、CharacterController、Rogdoll、Cloth模拟等等),物理模块会被关闭。所以,就你的问题而言,物理模块的开销只能降低,而不能完全消除。

对于物理模块的开销,我们建议从宏观上进行了解,当你的项目完全没有使用物理模块时,那就需要从它的调用次数入手了。
Physics.Processing调用耗时:
请输入图片描述

Physics.Processing调用次数:
请输入图片描述

可以看到,很多时候,该函数的CPU耗时其实并不是物理开销过高,而是调用次数过多。这主要是因为Unity 5.x默认设置的Fixed Timestep为0.02,Maximum Allowed TimeStep为0.333。也就是说,物理模块每20ms更新一次,所以如果某一帧很卡(200ms),那么物理模块会被调用10次,这样耗时就直接上去了。而0.333表示如果该帧CPU开销超过333ms了,那么就不会再调用物理模块,所以上图中调用次数中最大是17次。

请输入图片描述
所以,如果想进一步降低物理模块的开销,在完全没有使用物理的情况下,可以将Fixed Timestep设置为0.05或0.1均可,降低它被调用的频率。同时,尽可能优化其他模块耗时,让每帧的总体耗时尽可能降低。另外,需要注意的是,修改Fixed Timestep也会影响FixedUpdate的调用,在修改之前一定要检测项目中是否有使用FixedUpdate。

关于Contacts、Rigidbody、Collider的说明和推荐值,在UWA Tips中均有详细的说明。同时,也可查看如何读懂UWA报告——物理篇 。
请输入图片描述

此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/595351860ac5cef316b72ea1
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q2:Unity官方半透明Shader代码在iOS上运行出现问题,参考官方文档(https://docs.unity3d.com/Manual/SL-CullAndDepth.html)中Transparent shader with depth writes写了一个半透明的Shader,在所有iOS设备上都出现类似ZFighting的错误,在XCODE上看了一下,大致定位是深度写入/读取出现了问题。
正常情况

请输入图片描述
有问题的情况
请输入图片描述
环境如下:
Unity4.7.1 f1 graphics Api opengles3.0
测试设备:iPhone5s、iPhone 6、iPhone 6s.

同样的代码在Android设备上没有问题。
ios设备上将Graphics API 设置为OpenGL ES 2.0 和metal在显示正常。

同样的代码在Unity5.3.8上graphics ApI OpenGL ES 3.0 编译到iOS设备上显示正常。
请问是什么问题导致的呢?

第一个Pass预写深度,第二个Pass比较深度LessEqual,硬件差异以及图形API差异,是很难保证第二个Pass比较深度时Equal的。 是否可以手动设置一个深度偏移量来避免这个问题,相关文档可以参考: https://docs.unity3d.com/Manual/SL-CullAndDepth.html。

此问答来自于UWA 问答社区,目前题主反馈已经得到解决,特此感谢 jim 提供的回答。
https://answer.uwa4d.com/question/5951d21d96a4c14c505c478d
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q3:AssetBundle包字体bitmap A的使用到AssetBundle包Altas B时B冗余,比如我有个字体vip使用到betaCommon的altas。
请输入图片描述

然后betaCommon打成AssetBundle包。vip也打成AssetBundle包。但是 vip的AssetBundle包里面会包含betaCommon的png.这就造成了会有两份一样的png在内存中。

下图是vip的AssetBundle内容:
请输入图片描述

下图是betaCommon的AssetBundle内容:
请输入图片描述

根据研发团队提供的AssetBundle例子,已经复现了上述问题(我用的是Unity5.5.2版本),vip和BetaCommon两个AssetBundle确实存在冗余,其冗余度如下。
请输入图片描述

之所以出现冗余是因为vip和betaCommon两个Prefab实际上并没有建立其依赖关系(虽然mainfest上注明了存在dependencies)。所以,你的问题解决方式,只需要将BetaCommon Material设置为一个“显式”的AssetBundleName,那么冗余问题就不会存在了。
请输入图片描述

设置后,AssetBundle资源检测结果如下:
请输入图片描述

此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/5950ed9d4477ba5f1121521a
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q4:Unity 5.x打包系统加载资源会出现两份相同内存吗?对此怎么理解呢?
主要是针对unity5.x,特别是5.3.6版本。 我看其他博文上说是AssetBundle一份内存,然后LoadAsset又是一份,但是我看文档不是这样子的,AssetBundle那份只是一个配置信息,真正的内存是在LoadAsset的时候,希望UWA能为我们统一下理解。

理论上,内存是不会重复的,AssetBundle的内存和资源的内存是不一致的,特别是Unity 5.3版本以后。

在5.3.6版本上,加载一个LZ4格式的文件大小为5MB的AssetBundle,其内存是非常小,也就是经常看到的SerializedFile,该值根据OS的不同而不同,而最大不会超过0.5MB(每个AssetBundle内存占用)。AssetBundle.Load加载资源后,内存才会随着加载的资源不同而出现明显提升的现象。

具体的AssetBundle使用介绍,建议查看Unity原厂Manual网站,或者你应该知道的AssetBundle管理机制。

关于如何检测资源是否有重复,可以通过Profiler、 UWA资源检测与分析 和 UWA GOT 来进行查看。

此问答来自于UWA 问答社区:
https://answer.uwa4d.com/question/59545f97ce12979679229559
如您对该问题仍有疑问,可以转至社区进行进一步交流。


资源管理

Q5:最近学习了UWA关于UI性能优化的直播,想问下切换UI场景使用AssetBundle加载慢,怎么优化界面进入速度,是应该预加载吗?

一般来说,界面加载慢主要的原因有,图集纹理的加载以及大量UI元素的实例化操作。
针对图集的加载,可以尝试合理的规划图集,尽量控制界面所引用的图集数量(即使用到了某个图集中的一个Sprite,也会加载整个图集);其次可以尝试对公共图集进行预加载,通常公共图集较大,且被使用的概率很大。

针对大量UI元素的实例化,这项开销大通常只发生在背包等复杂的界面中,而对于这类复杂界面可以考虑进行分步实例化,即首先实例化如外框、容器等部分的UI元素,然后分帧实例化背包中的UI元素,从而提高界面打开的速度以及流畅性。







原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

目录
相关文章
崮德好文连载 - 个人如何成长?
毕业后刚开始工作的工程师,对技术一定是充满热情的,也是非常专注的投入工作。但是工作3,4年然后跳槽一两家公司后,渐渐的就迷失了,感觉技术有了一定提升,比刚毕业的大学生,确实有点优越感,但是比下有余,比上不足,感觉差距很大,关键是单纯提高技术能力,似乎永远赶不上优秀的前辈,这样的困惑完全可以理解。我想聊聊这个阶段的工程师,该如何成长。
崮德好文连载 - 方法比决心重要
我们很多工程师,平时不喜欢读书,突然有一天,听到某几个行业领袖说读书怎么怎么好,本着对行业领袖的绝对信任,这些工程师就急冲冲的跑去买来一堆推荐的书,然后也就试着每天阅读起来,但是不到一周时间,他们就慢慢放弃了。然后他们下次在听到有人推荐书,就会说,瞧,又是一个卖心灵鸡汤的人来了。
|
消息中间件 边缘计算 Cloud Native
议题剧透|欢迎围观 2021 阿里云开发者大会神仙打架现场
数字时代,创新的时代。万千开发者汇聚智慧,启迪梦想,不断推动创新发生。
议题剧透|欢迎围观 2021 阿里云开发者大会神仙打架现场
|
SQL 移动开发 NoSQL
年末学弟四面阿里面经!
最近学弟把面试经历给我整理了下,我特意发出来给有需要的同学!
310 0
|
中间件 Go 流计算
为“程序媛”点赞 “阿里中间件性能挑战赛”完美收官
由阿里巴巴集团主办,阿里云天池大数据平台承办的第二届“阿里中间件性能挑战赛”吸引了1946支队伍报名参加,不但有来自413所知名高校的学生和科研人员,还有来自40余家企业的社会选手,这表明,“阿里中间件性能挑战赛”已经成为影响力巨大的重要技术赛事。
5273 5
|
人工智能 运维 开发者
【云栖精选】帮你把握“金三银四”,阿里开发者招聘节面经总结帖来袭
云栖精选,一文为你网罗本周云栖社区本周精华帖,精彩不容错过。换工作、找实习,那你一定不能错过“金三银四”,想要来阿里巴巴,一些笔试和面试技巧一定不能少。本期中,为大家选取了几篇关于阿里招聘节的相关内容。
7439 0
(转)阿里八卦:L氓出没,注意!
(转自 http://medic.iteye.com/blog/1056515) 2007年我面试了一个被阿里面试后刷掉的电话销售人员,她本来在广州有一份好好的工作,之所以来杭州就是想进阿里。
830 0
曾经的理发店小弟,现在是阿里P10技术大牛
红雪是蚂蚁金服的研究员,带领大几百号人的技术团队,最近还入选了“全球35位35岁以下科技创新青年”。
3293 0