如何在Unity3D中优化场景加载

8
我想知道是否有任何方法可以加速在unity3d中的关卡加载。我目前在两个场景之间加载关卡,但是在ipad3上加载新关卡仍需要大约5秒钟。这还是很多的。
我已经优化了所有的启动和唤醒功能,因此在这里实际上没有太多的事情要做。但是每个场景中有很多精灵,我认为它们占用了大部分的加载时间。
我能否确定哪些对象需要在开始时加载,哪些可以在前10秒内加载?我尝试添加级别添加,但这会使我的游戏卡顿一两秒钟。
有没有聪明的方式来加快速度?

1
答案是“可以!你可以以某种方式确定它。”但是,如果不知道您的游戏逻辑是什么,就无法确定如何确定它。您是否运行了分析器以检查哪些操作需要时间?这是解决任何性能问题的第一步。 - Dan Puzey
1
你是如何加载物体的?我问这个问题,因为我也曾经遇到过场景加载问题,我会分享一下我如何提高性能。我试图加载大约30,000个块,这些块在32x32的区块中。我在嵌套的for循环中实例化这些块。由于它尝试在之前的块被加载之前实例化另一个块,所以for循环造成了很多卡顿。这需要大约10秒钟才能加载完成。我通过使用等待0.05秒的WaitForSeconds方法添加延迟来改善了这个问题。这使我的场景加载时间缩短了一半 :) - Savlon
我在代码中没有实例化任何东西。我不知道如何运行分析器来查看加载时间长的原因。一旦场景加载完成,它几乎立即运行。 - gabrjan
凭借您提供的有限信息,帮助您确实很困难...也许您应该从脚本中开始实例化对象?这样您就可以控制它们何时加载... - Savlon
@gabrjan 你使用的是Unity Pro还是免费版?这对我即将提出的建议很重要。 - apxcode
要么减少启动时加载的资源数量,要么在加载下一个场景/关卡(DontDestroyOnLoad)之前预热它们。也可以使用低多边形模型(或最远LOD),或者任何适用于您的项目的方法(这取决于太多因素)。如果没有任何优化的方法,可以为低硬件使用#if,并在场景之间弹出/淡入/淡出“正在加载,请稍候”屏幕(显示画布,加载场景,隐藏画布)。该屏幕将在场景加载时保持不变。 - user2299169
1个回答

5

加载关卡所需的时间取决于场景中引用的物品。减少加载时间的唯一方法是删除物品。

您提到可以在关卡开始后加载某些物品,您可以使用Resources.Load来实现。但是,如果正在引用您要加载的物品,则这种方式只有在没有引用时才对您有益。例如,如果您的场景中有100棵树,则将其减少到10不会有任何好处。树仍然被引用,并且必须在启动关卡之前加载。如果您将其全部删除,则可以在不加载树的情况下启动关卡。然后,您可以使用Resources.Load将其加载并开始种植它们,也许需要在几帧内完成以防止出现卡顿。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接