前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >优化Profiler中Others的耗时……

优化Profiler中Others的耗时……

作者头像
企鹅号小编
发布2018-02-12 10:04:59
1.4K0
发布2018-02-12 10:04:59
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

我们将从日常技术交流中精选若干个开发相关的问题,建议阅读时间15分钟,认真读完必有收获。如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨。

内存

Q:我的项目刚升级到Unity 5.6版本,然后在测试的时候出现了很严重的卡顿,我用Profiler真机检测的时候,发现CPU的Others选项耗时很高,但是看了下也没什么粒子消耗,然后Animator的消耗也不高,这是为什么呢?

A:Unity引擎中有10+的模块,而Profiler面板中也就明确显示出6个,Rendering、Scripts、Physics等等,其余模块的耗时都在被统计在Others中,所以Others高其实也是正常的。

在题主的Profiler截图中可以看到,当前帧的CPU耗时为166ms,但面板上的BehaviorUpdate和LateBehaviorUpdate分别为36ms和37ms,这说明还有大量的CPU耗时在面板下方,题主需要往下拉,看看下面都有哪些耗时存在,理论上,这些耗时加起来是需要等于166ms的。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a2f74959d49d2a42cfa3a37

动画

Q:我项目中的骨骼“Weapon R”的轨迹很奇怪,想请教下UWA。

我是这么操作的,第一步:设置@skin.fbx

依次执行Reset -》Enforce T-Pose

第二步:设置动画文件

第三步:Play。观察骨骼"Weapon R”,从Idle -》 Run会有诡异的曲线。

再重复上述设置,设置@skin.fbx时仅Reset,不执行Enforce T-Pose,我观察到Weapon R就是正常的,我在本帖里提供了例子。

A:我们从附件的工程来看,因为Weapon R骨骼的存在,如果Enforce T-Pose,会使手部的旋转失真,并且从Idle->Run时会导致humanoid的插值混乱,从而得到错误的手部动画,并因此影响Weapon R。可以使用configuration中Pose->BindPose,这样可以保证可以身体各部位能够正确映射,并且插值时不会出现问题,这边这样测试时没有出现诡异轨迹。另外修改完config后不要忘了动画fbx中update一下。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a260564d99fdb2b3c62886e

UI

Q:我们项目现在用的版本是Unity 4.7,NGUI。我们有几个小的字体图集,本来是部分功能模块特有的,现在很多功能界面交叉引用了。大概是几个256*256和512*256的图集,我想把它们合并成一张1024*1024的大的公用图集。使用会方便一些,但是公用图集已经有2张1024的,加上这个就是3张大的,我想问下NGUI在使用过多1024图集的时候,是不是上传到GPU的时候也会有影响,如果是UGUI也会有这样的问题吗?注:公用图集常驻内存,独立打包。

A:“上传到GPU”一般只是发生在加载后的,所以如果这几张小图集确实是经常同时被用到的话,合在一个1024图里是合理的做法,对DrawCall的合并也会有明显的好处。针对小图合并大图造成的影响这个问题,UGUI和NGUI是差不多的,只是UGUI需要通过Sprite Packer查看下是不是确实只合成一张了。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a30ec9080dbcb53066289ea

内存

Q:Unity 5.4.6f3版本中UGUI的窗口资源无法卸载,如果该窗口没有使用字体,仅仅使用了图集的话是可以被回收的,但是只要UI使用了字体,就会导致无法回收。在Unity5.6.4f1版本中无此问题。 已在问答社区提交了例子。

A:这个问题在真机上是不会出现的,已经通过题主的附件进行了验证。

而Editor下会出现的原因,可参考类似的这个问题。另外补一句,查资源的内存情况,不建议在Editor下进行,一方面是有可能Editor下的逻辑代码和Runtime下会有差别,另一方面在Editor里被编辑过的资源也会被加载进内存,并有可能被缓存住。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a278aee9e3affe04a6aa8cd

加载

Q:Shader.WarmupAllShaders(); 这个是预编译了所有的Shader么? 我还需要把那些常用的Shader放到一个Prefab上面,然后在游戏启动的时候加载么?

A:Shader.WarmupAllShaders有两个问题,一个是它只warmup当前时刻的所有Shader,如果后续有新的Shader加载进来,还是会重新解析的,但如果warmup时刻已经能保证绝大部分Shader都已经在内存中,那么使用这个API就足够了;第二是这个API的耗时非常高,因为它会warmup所有的keywords组合,无论你是否在项目中使用到,所以在Unity 5.0以后可以尝试通过shadervariantcollection.warmup来取代。

该问题来自UWA问答社区,如您对该问题仍有疑问,可以转至社区进行进一步交流。

https://answer.uwa4d.com/question/5a3257b8710664857e39b40b

本文来自企鹅号 - 侑虎科技媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 侑虎科技媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档