You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity协程实现场景延迟加载报错:变量X不在当前上下文

问题分析与解决

错误原因

  1. 协程定义位置错误:你把Timer协程放在了FixedUpdate方法的if代码块内部,属于局部函数,Start方法调用StartCoroutine(Timer())时找不到这个方法,直接触发上下文错误。
  2. 变量语法与作用域问题:协程里的float X =- 0;是语法错误(正确写法是X = 0;),而且重新定义了局部变量X,会遮蔽类级别的X,导致无法修改外部变量。
  3. 逻辑冗余:用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 21:39:36