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

求助:通过引用修改变量时,变量仅成功变更一次

问题解决:通过引用修改变量仅生效一次的问题

你的代码里LevelCount方法本身逻辑是对的,用ref传参也能实现变量自增,之所以只生效一次,大概率是调用逻辑的问题,以下是排查和解决方向:

排查可能的原因

  • 协程只被触发一次:如果StartCoroutine(LoadScene(...))只被调用了一次,那LevelCount自然只会执行一次,变量也就只加1。
  • 变量被意外重置:检查代码其他地方有没有对levelCount赋值的操作(比如levelCount = 0),如果有,会覆盖自增的结果,看起来像是只生效了一次。
  • 协程触发条件未满足:比如LoadScene的触发逻辑(比如关卡完成事件)只执行了一次,或者waitTime过长还没到执行时机。

解决步骤

  1. 验证方法本身的有效性
    先跳过协程,直接多次调用LevelCount测试,比如在按钮点击事件或者Update里调用:

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            LevelCount(ref levelCount);
            Debug.Log(levelCount); // 查看控制台输出,确认每次按空格是否都加1
        }
    }
    

    如果这里能正常累加,说明方法本身没问题,问题出在协程的调用逻辑上。

  2. 确保协程被多次触发
    找到调用StartCoroutine(LoadScene(waitTime))的地方,确认每次需要增加levelCount时,这个方法都被正确调用。比如在场景加载完成的回调、关卡通关的事件里重复触发。

  3. 简化代码(可选)
    因为levelCount是类的成员变量,完全不需要用ref传参,直接在方法里操作即可,这样代码更简洁,也避免不必要的引用传递:

    int levelCount = 0;
    
    IEnumerator LoadScene(float waitTime)
    {
        yield return new WaitForSeconds(waitTime);
        LevelCount(); // 直接调用
    }
    
    public void LevelCount()
    {
        levelCount++;
    }
    

内容的提问来源于stack exchange,提问作者Alvaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:15