Unity协程实现场景延迟加载报错:变量X不在当前上下文
问题分析与解决
错误原因
- 协程定义位置错误:你把
Timer协程放在了FixedUpdate方法的if代码块内部,属于局部函数,Start方法调用StartCoroutine(Timer())时找不到这个方法,直接触发上下文错误。 - 变量语法与作用域问题:协程里的
float X =- 0;是语法错误(正确写法是X = 0;),而且重新定义了局部变量X,会遮蔽类级别的X,导致无法修改外部变量。 - 逻辑冗余:用
FixedUpdate循环判断X的值完全没必要,既浪费性能,又打乱了协程的执行逻辑。
修正后的代码
using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; public class Anim : MonoBehaviour { float X = 1; void Start() { // 仅在X为1时启动协程,避免重复执行 if(X == 1f) { StartCoroutine(Timer()); } } // 将协程移到类作用域下,作为成员方法 IEnumerator Timer() { yield return new WaitForSeconds(10f); SceneManager.LoadScene(1); // 修改类级别的X,无需重新定义 X = 0; } }
简化版(无额外变量需求时)
如果你的需求只是启动后10秒加载场景,可以去掉X变量,代码更简洁:
using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; public class Anim : MonoBehaviour { void Start() { StartCoroutine(Timer()); } IEnumerator Timer() { yield return new WaitForSeconds(10f); SceneManager.LoadScene(1); } }
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

