前几天我们游戏升级unity3d版本到5.4后,出现一个严重的问题,每当打开一个新UI,会卡大约1秒时间,升级unity3d版本到5.5和5.6依然会卡1秒,而5.3及更低版本却没有问题。
查找问题
出现问题后,首先打开Unity的Profiler看看具体是哪里出现问题了,下面是Profiler截图:
从Profiler中可以看出,最耗时的不是什么自己的代码,而是 Unity 的 WaitingForJob
,这表示Unity在等待 Job System 线程,然后再切换到 Timeline
视图,看看 Unity 具体在等待什么内容。
Timeline 视图里发现 Canvas.Sort
耗费的时间为424ms,与等待的时间基本一致,又有些我们项目使用了大量的Canvas,并且使用了 Canvas.sortingOrder
来排序,所以就想是不是使用了太多的Canvas的问题。
- 尝试将游戏中所有嵌套的Canvas都去掉,UI卡掉的问题果然消失了。
- 尝试不移除Canvas,只是不勾选
OverrideOrder
,UI依然会卡顿。
由于项目中UI比较复杂,后面又做了N多尝试,终于找到了真正触发UI卡顿的原因,这也正是Unity的一个bug。
由于背景遮罩图片设置的缩放比较大(100, 100, 100),导致Untiy触发了卡顿的bug。只需将该背景设置为正常缩放(1, 1, 1)就不会再卡顿了。
现在做一个精简的测试demo,只需在场景中放置一个Image,并且让这个Image的最终面积(size*scale)比较大,然后显示/隐藏该Image,就可以看到卡顿现象。
上面是我测试的参数,如果机器性能比较好,需要增大Image的面积即可测试该问题。
总结
Iamge的面积够用就好,需要设置的太大。
出现问题后一定要多尝试,尽可能去除跟问题无关的因素。
最终,该问题在 Untiy 5.6.2.p1中被修复。
» 本文链接地址:https://www.litefeel.com/bug-for-large-image-in-unity3d/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 02 月 25 日 01:34