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