Unity中AddObjectById协程请求未完成即终止的问题解决
Unity协程在
yield return get.SendWebRequest()处终止的问题排查与解决 问题场景
在Unity项目中,我编写了SaveServer函数向服务器发起请求,遍历返回结果时需要完成两个操作:调用函数将图片添加到列表,同时通过AddObjectById协程从同一服务器获取对象并添加到另一列表。但实际运行时,AddObjectById协程执行到yield return get.SendWebRequest()这一行后就彻底停止,后续代码完全不执行。
排查过程
- 首先验证了项目中已有的
GetRequest方法可以正常运行,排除了请求逻辑本身的问题 - 最终定位到关键原因:协程未执行完成时,挂载该脚本的GameObject被调用
gameObject.SetActive(false)禁用。根据Unity官方文档,GameObject被禁用后,其所有挂载的组件都会被禁用,正在运行的协程会直接终止,无法继续执行后续逻辑。
解决方案建议
- 调整逻辑顺序,确保
AddObjectById协程执行完成后,再调用gameObject.SetActive(false)禁用对象 - 如果需要隐藏对象但不终止协程,可以仅禁用对象的渲染相关组件(如
MeshRenderer、Canvas等),而非禁用整个GameObject - 将协程相关的网络请求逻辑迁移到一个始终保持激活状态的全局管理器GameObject上,避免因对象禁用导致协程中断
内容的提问来源于stack exchange,提问作者Lucas Fellipe Mondini Pereira
相关产品推荐
相关产品推荐

