现在的位置: 首页 > 综合 > 正文

说说unity项目的优化

2014年05月22日 ⁄ 综合 ⁄ 共 1131字 ⁄ 字号 评论关闭
最近由于公司一个项目的需要(马上就上微信了呦),我被临时抓过来搞了一个月的unity。
主要是帮着搞一下性能的优化以及解决一些兼容性问题。因为我之前对Unity和移动开发都不是很了解,所以简单总结一下,积累点经验。
  • 首先是选定基准平台,android是小米1,ios是iphone4。先在小米1上简单的profile了一下,发现android平台的帧率非常不稳,对profile工作影响很大。然后试了一下iphone4,发现ios上的帧率非常稳定,而且每一部分的开销非常明确,果断暂时放弃andriod,基于ios展开后续工作。
  • 说一下unity自身提供的高大上的Profile功能,可以实时看到个各部分的开销,比如脚本,动画,渲染,声音等。但在实际的优化过程中这东西的帮助不大。比如你看到渲染的开销最大,但你依然不知道渲染什么东西的开销最大,也就无从优化。但有一个应用场景,这个功能是非常有效的。例如你知道在某个时刻帧率会突然降低,这时你就可以从曲线中看到是那一时刻究竟是什么东西的开销变大了。这时你就可以进一步分析问题原因了。另外在脚本中添加profile关键字也会非常有用。
  • 接下来说一下xcode里的debug navigator,在这里面可以实时看到CPU和GPU的占用情况。这玩意实在是太有用了。因为手机游戏里面的东西本来就比较少,稍微关点东西马上瓶颈就变了。如果每次都要自己想办法判断是cpu瓶颈还是gpu瓶颈会非常麻烦。但有了这个,就会方便很多。
  • 经过测试分析,角色和场景是大头,其中角色是cpu瓶颈(CPU蒙皮和顶点数据传输),场景是GPU瓶颈。然后我们对美术资源进行了梳理,大量合并了draw call。角色还减了面。简化了一些特效(特效对CPU和GPU的开销都比较大)。一轮优化过后帧率大幅提升。
  • 后续测试过程中发现,某些效果出现时帧率会大幅降低。一开始以为是这些效果本身的渲染开销过大。后来将这些效果大幅简化后问题依然存在。继续反复测试最终发现,非均匀缩放动画在unity中非常的慢,一个动画在iphone4上能有10ms的开销。最后将非均匀缩放都改成均匀缩放,效果不变,性能大幅提升。论坛中也有人问过这事儿,这算是unity的一个坑吧。
  • 类似的还有一个效果我们会每帧动态生成mesh,这个也很慢,后来改成每帧只重新生成index,性能提升。
  • 最终还是提供了一个功能,可以在低端平台上选择关闭一些效果来换取更流畅的帧率。
兼容性方面就说一个比较典型的吧。我们发现在很多android手机上在某些情况下会经常闪屏。后来发现是跟clear次数过多有关(UI用到了好几个Camera,每个都会clear深度),其实UI和特效渲染时都不需要clear,修改后问题解决。

抱歉!评论已关闭.