Unity3D/C#-资源和级别的异步加载导致帧丢失

Unity3D/C#-资源和级别的异步加载导致帧丢失,c#,unity3d,C#,Unity3d,我试图在Unity 3D中加载一个包含一些大型资源的关卡,但在加载内容时,我无法摆脱口吃和滞后 我将我的主场景划分为不同的子级别,并异步加载它们 因此,首先我尝试从resources文件夹预加载实际资产: private IEnumerator preLoadAsset(string assetPath) { ResourceRequest asyncLoad = Resources.LoadAsync(assetPath); yield return asyncLoad;

我试图在Unity 3D中加载一个包含一些大型资源的关卡,但在加载内容时,我无法摆脱口吃和滞后

我将我的主场景划分为不同的子级别,并异步加载它们

因此,首先我尝试从resources文件夹预加载实际资产:

private IEnumerator preLoadAsset(string assetPath)
{
    ResourceRequest asyncLoad = Resources.LoadAsync(assetPath);
    yield return asyncLoad;
    asyncLoadedAssetsCount += 1;
    preloadSceneAssets();
}
此步骤完成得很快,对性能影响很小

private IEnumerator LoadYourAsyncScene(string sceneName)
{
    AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    asyncLoad.allowSceneActivation = true;
    yield return asyncLoad;
    asyncLoadedScenesCount += 1;
    loadAdditiveScenes();
}
无论我将场景激活设置为true还是false,大多数延迟都发生在这里

我还在脚本前面将应用程序的后台加载优先级设置为低:

 Application.backgroundLoadingPriority = ThreadPriority.Low; 
我做错了什么? 在加载附加场景之前,它是否有助于预加载资源?如果没有,如何有效地利用内存中资源的预加载


注意:除了每个场景中有一个大型资源外,添加的场景都是空的,并且没有执行启动/启动/唤醒功能。

异步场景加载仅在从硬盘加载资源的阶段有效。 接下来是合并预制件,是他制造了这个问题

资料来源:探查器数据

解决方案:
使用GameObject手动实例化预置。实例化

不确定这个答案是否正确,但我在这里找到了一个确切的问题与解答:你应该进入协同程序,而不是协同程序,因为协同程序只是一种“假”程序异步但仍在同一线程上运行。@derHugo这里的问题似乎是不可能从主线程外部调用Unity API的任何内容(如场景加载)
UnityException:LoadAsyncInternal只能从主线程调用。
-此外,在主线程中使用async/await实际上比我使用协同程序时更冻结了应用程序的执行