当前位置: 首页 > news >正文

AsyncOperation.allowSceneActivation导致异步加载卡死

先看这段代码,有个诡异的问题,不确定是不是bug

public class Test : MonoBehaviour
{void Start(){StartCoroutine(LoadScene(Ego.LoadingLevel));}IEnumerator LoadScene(string sceneName){LoadingUI.UpdateProgress(0.9f);yield return new WaitForSeconds(1f);var asyncOperation = SceneManager.LoadSceneAsync(sceneName);asyncOperation.allowSceneActivation = false;//设置加载完成后不能自动跳转场景while (!asyncOperation.isDone){LoadingUI.UpdateProgress(0.9f);if (asyncOperation.progress == 0.9f){Debug.Log("加载关卡完成");LoadSceneFinish();yield break;}yield return new WaitForEndOfFrame();}}[Button]void LoadSceneFinish(){StartCoroutine(LoadResource("Test"));}IEnumerator LoadResource(string url){Debug.Log($"开始加载:{url}");var assetAsync = Resources.LoadAsync(url);assetAsync.completed+= delegate(AsyncOperation operation){//这个事件也无法触发Debug.Log("加载完成");};while (!assetAsync.isDone){//这里一直为0Debug.Log("Progress"+assetAsync.progress);yield return null;}Debug.Log("完成");}
}

我先加载了关卡,但是加载完毕不跳转,所以用asyncOperation.allowSceneActivation = false;进行不跳转,然后再次加载一个Resource下的资源,用异步Resources.LoadAsync的方式,一直发现进度为0没有更新,等了好久也是一样,而同样的代码在别的地方是好的。

而且如果使用Resources.Load是能直接加载成功的。

翻了下官方api解释:

AsyncOperation.allowSceneActivation

public bool allowSceneActivation ;

描述

允许在场景准备就绪后立即激活场景。

当与 LoadLevelAsync 和 LoadLevelAdditiveAsync 结合使用时,它允许您 延时场景的实际激活。(并卸载前一个场景)。

当 allowSceneActivation 设置为 false 时,进度将在 0.9 处停止。isDone 保持 false 状态。当 allowSceneActivation 设置为 true 时,isDone 可以完成。虽然 isDone 为 false,但 AsyncOperation 队列已停止。例如,如果 LoadSceneAsync.allowSceneActivation 设置为 false,并且另一个 AsyncOperation(例如 SceneManager.UnloadSceneAsync)已初始化,则在第一个 allowSceneActivation 设置为 true 之前不会调用最后一个操作。

也就是allowSceneActivation为false的话,其他的AsyncOperation也是卡住的。

这个不确定是不是unity的bug,太折腾人了。

对了,版本是Unity2020.3。

只能先加载资源再加载场景了。

http://www.lryc.cn/news/519573.html

相关文章:

  • 如何搭建 Vue.js 开源项目的 CI/CD 流水线
  • 单通道串口服务器(三格电子)
  • 【Excel/WPS】根据平均值,生成两列/多列指定范围的随机数/随机凑出两列数据
  • 使用网页版Jupyter Notebook和VScode打开.ipynb文件
  • 记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据
  • CDA数据分析师一级经典错题知识点总结(5)
  • 服务器、电脑和移动手机操作系统
  • 深入解析 Flink 与 Spark 的性能差异
  • 如何在 Linux、MacOS 以及 Windows 中打开控制面板
  • 微信小程序中 隐藏scroll-view 滚动条 网页中隐藏滚动条
  • Java 实现 Elasticsearch 查询当前索引全部数据
  • android刷机
  • 【25考研】西南交通大学计算机复试重点及经验分享!
  • OpenCV相机标定与3D重建(49)将视差图(disparity map)重投影到三维空间中函数reprojectImageTo3D()的使用
  • 学习HTTP Range
  • 大语言模型训练的数据集从哪里来?
  • Webpack和Vite的区别
  • 【再谈设计模式】模板方法模式 - 算法骨架的构建者
  • Bytebase 3.1.1 - 可定制的快捷访问首页
  • Java阶段四04
  • B2C API安全警示:爬虫之外,潜藏更大风险挑战
  • OCR文字识别—基于PP-OCR模型实现ONNX C++推理部署
  • 如何播放视频文件
  • MySQL -- 约束
  • php 使用simplexml_load_string转换xml数据格式失败
  • net-http-transport 引发的句柄数(协程)泄漏问题
  • 高级软件工程-复习
  • eslint.config.js和.eslintrc.js有什么区别
  • 如何使用MVC模式设计和实现校园自助点餐系统的微信小程序
  • 继续坚持与共勉