Unity编辑器:在SceneManager.LoadScene之后,较长的Application.WaitForAsyncOperationToComplete“ Self ms”时间

时间:2018-07-04 16:25:21

标签: performance unity3d

我正在通过致电SceneManager.LoadScene加载我的游戏场景。但是,在构建中加载游戏场景时,有时会获得较长的加载时间。我无法始终如一地重现此问题,但是在调试此问题时,我注意到我可以在第一次播放的每次Unity编辑器(2017.3)中重现此问题。

如果我在启动Unity Editor之后首次进入游戏模式,然后单击游戏内按钮加载我的游戏场景,则分析器显示Application.WaitForAsyncOperationToComplete花费了大约9000毫秒。我在调试它时遇到了麻烦,因为时间花费在“ Self ms”中。

如果我重新进入播放模式并重复相同的步骤,后续运行将显示WaitForAsyncOperationToComplete仅花费约200毫秒。如果我重新打开Unity Editor并重复相同的步骤,时间会跳回到9000 ms。

如何在WaitForAsyncOperationToComplete中调试和修复这么长的“ Self ms”时间?我还想知道是什么会导致打开Unity编辑器后仅在第一次播放时出现这么长的延迟(以及播放模式运行之间在Unity编辑器中仍然存在的原因)。


我的探查器层次结构如下:

EarlyUpdate.UpdatePreloading
- Loading.UpdatePreloading
-- UpdatePreloading
--- Application.WaitForAsyncOperationToComplete [*takes about 9000 ms, 8500 self ms*]
---- PreloadSingleStep [*takes about 500 ms*]
----- Application.LoadLevelAsync Integrate
----- Loading.AwakeFromLoad
----- (...)

在启动Unity Editor之后的第一场戏中,探查器的屏幕截图请参见以下内容(请注意,Deep Profile已关闭,但打开Deep Profile的结果类似):

record-slow-issue.PNG

有关后续播放器的事件探查器的屏幕截图,请参见下文(请注意,“ Self ms”降至合理的〜200 ms而不是〜9000 ms):

record-no-longer-slow-after-first-editor-play

2 个答案:

答案 0 :(得分:2)

我以前在较旧版本的Unity(2017)上看到此错误。自升级以来我还没有看到它

答案 1 :(得分:0)

调试方法

第一步,我通过系统地删除正在加载的场景中的GameObject来确定导致该问题的GameObject,从而调试了该问题。

这样做,我发现当我从场景中删除特定的GameObject时,较长的加载时间消失了。

(鉴于我能够用以前的方法解决问题,因此我没有直接研究如何调试较长的Application.WaitForAsyncOperationToComplete“ Self ms”时间。)