Unity教程之-Unity3d移动平台性能优化专题(12):面板的设置

 

上篇文章《Unity教程之-unity3d移动平台性能优化专题(11):脚本优化》,本篇文章我们继续探讨优化策略:面板的collider问题和rigibody设置 !

首先有一个官方的说法:静态Collider请不要移动,否则会引起物理引擎啥啥啥重置,消耗性能。

然后面板上毫无疑问是有collider的,而且可以肯定的是面板总是存在移动。那么就加上刚体,第二个问题来了,大量的刚体导致物理引擎计算时间过长。

但我纳闷,刚体都是不动的,为啥会如此耗时呢?请教了下外国友人,如下:

 

If you need the colliders just as raycast hit object do this:

  • Make sure they are set to isTrigger
  • Create a new layer for the objects and put them all on this layer
  • Go to Edit -> project settings -> Physics and disable all interactions in the collision matrix. So just clear the row and column of your layer in the matrix.
  • When raycasting against them make sure you use the layermask and pass a layermask that only contains the layers you want to raycast against.

哈哈,按照他说的做之后,果然性能上不在是刚体消耗,不过似乎帧数并没有提高,我决定继续分析一下。

看了下似乎是渲染同步引起的,但渲染方面似乎没有太好的办法,而且我也好奇为啥我们的面板渲染消耗这么高。

经过测试,似乎只要打开一个面板,手机上直接下降10帧。看来面板上确实有什么东西存在。

那么就要进行比较分析了。我首先编译了一个简单版,和性能分析器相连,然后在不打开面板情况下观察,然后突然打开一个面板,看两遍的性能消耗变化。

暂时不好发现问题所在,只能通过比较了,安卓上下载了一个帧率显示器,进入了我叫MT2和盗梦英雄的游戏,面板上显示竟然是接近60帧,而我们的,只能到30帧。我勒个去,到底是啥问题啊。

经过不断研究,发现了一个特点,就是盗梦英雄和我叫MT背景都是2d的,我们的背景是一个主城,3d的。那么可能就是这个原因,背景摄像机和UI摄像机叠加计算。

那么就是说,我们打开面板,背景其实就要被舍弃了。一种比较好的体验就是将背景模糊,然后制作成一个贴图放到UI上,但如果自己做图片会很大,如果 用程序实现,怕会有卡顿。然后请教了下策划,它们说游戏很多都是这么处理的,找一个通用的背景图,统一作为所有面板的模糊背景。应该是可行的。ok。既然 如此,就测试一下,随便写了两行,打开面板就关闭3d摄像机。关闭面板又会开启3D摄像机。

测试效果不错,增加到了40+帧,这样还算说得过去。