求助:通过引用修改变量时,变量仅成功变更一次
问题解决:通过引用修改变量仅生效一次的问题
你的代码里LevelCount方法本身逻辑是对的,用ref传参也能实现变量自增,之所以只生效一次,大概率是调用逻辑的问题,以下是排查和解决方向:
排查可能的原因
- 协程只被触发一次:如果
StartCoroutine(LoadScene(...))只被调用了一次,那LevelCount自然只会执行一次,变量也就只加1。 - 变量被意外重置:检查代码其他地方有没有对
levelCount赋值的操作(比如levelCount = 0),如果有,会覆盖自增的结果,看起来像是只生效了一次。 - 协程触发条件未满足:比如
LoadScene的触发逻辑(比如关卡完成事件)只执行了一次,或者waitTime过长还没到执行时机。
解决步骤
验证方法本身的有效性
先跳过协程,直接多次调用LevelCount测试,比如在按钮点击事件或者Update里调用:void Update() { if (Input.GetKeyDown(KeyCode.Space)) { LevelCount(ref levelCount); Debug.Log(levelCount); // 查看控制台输出,确认每次按空格是否都加1 } }如果这里能正常累加,说明方法本身没问题,问题出在协程的调用逻辑上。
确保协程被多次触发
找到调用StartCoroutine(LoadScene(waitTime))的地方,确认每次需要增加levelCount时,这个方法都被正确调用。比如在场景加载完成的回调、关卡通关的事件里重复触发。简化代码(可选)
因为levelCount是类的成员变量,完全不需要用ref传参,直接在方法里操作即可,这样代码更简洁,也避免不必要的引用传递:int levelCount = 0; IEnumerator LoadScene(float waitTime) { yield return new WaitForSeconds(waitTime); LevelCount(); // 直接调用 } public void LevelCount() { levelCount++; }
内容的提问来源于stack exchange,提问作者Alvaro
相关产品推荐
相关产品推荐

