如何使ScrollRect平稳移动?

时间:2019-09-13 15:50:34

标签: user-interface unity3d

想象一个看起来像这样的Unity(2019.2.5)应用程序(不是游戏):

  • 一个简单的标签栏,可在视图之间切换。 (只需几个按钮即可启用/禁用其他面板)。
  • 每个视图都包含一个ScrollRect,在此显示实际内容。
  • ScrollRect内显示的面板上没有花哨的东西。没有动画,只有普通的UI组件,如TextButtonToggleSlider和一些Images

问题是所有ScrollRects的滚动速度都有些缓慢,我想对此加以改进(即,使其平滑滚动)。看一下探查器,在一部使用了四年的老手机(LG Nexus 5X)上发现了以下内容:

  1. CPU使用率-呈现:大约需要50毫秒。
  2. CPU使用率-UI:静止不动大约需要2毫秒,而滚动平均需要6ms。
  3. UI布局-平均需要2-3毫秒
  4. UI呈现-平均需要1毫秒

因此,似乎CPU是瓶颈。但是,该应用程序没有执行任何操作(这实际上只是在显示UI)。问题是,如何改善渲染的CPU使用率?

“主线程”的时间轴中有一个有趣的小细节:

  • PlayerLoop大约需要60毫秒。
  • EarlyUpdate.PresentBeforeUpdate大约需要35毫秒,PostLateUpdate.FinishFrameRendering大约需要12毫秒(均显示在同一行)
  • Graphics.PresentAndSync:35毫秒
  • Device.Present:35毫秒
  • 所有其他显示的值均低于5毫秒。

您有什么想法可能会导致35ms的演示时间?或者如何调试它以获得更深入的信息? 任何想法都欢迎。谢谢!

更新: 这是一个热节流问题:

设备冷时,每帧大约需要33毫秒,而Unity正在等待每帧15-22毫秒以进行VSync。设备变暖后,每帧突然需要大约60-70毫秒。为了验证这一点,我将手机放在了一块冰块上,自那时起,帧时间一直稳定在33毫秒。

现在的问题是:有什么可以针对它做的吗?

我刚刚将应用程序移到了LWRP,并且它感觉就像现在要花点时间才能出现问题一样,但是它肯定不是固定的。 UI到不同的画布上很可能不会有任何区别。空视图的快速测试显示了相同的问题...

您还有其他想法吗?

0 个答案:

没有答案