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

Unity C#如何提升int更新频率 修复EggNumber数值回退bug

问题根因

你的EggNumber回退是几个逻辑错误共同导致的:

  • 核心触发点:MakeEggVisible协程的while循环入口第一行写了EggNumber = OldEggNumber;,每轮循环都会强制把当前蛋数重置为上一轮存储的旧值。新增小鸡时如果对EggNumber做了增量修改,走到下一轮循环开头就会被直接覆盖,表现为数值回退。
  • 变量作用域错误:Start()方法中统计初始小鸡数时,重新声明了局部变量int ChickenCount,和类的全局公共字段ChickenCount重名,导致Start阶段统计的初始小鸡数量根本没有存入全局变量,初始计数无效。
  • 冗余赋值干扰:代码中前后写了3次EggNumber = OldEggNumber,除了循环开头的重置逻辑会直接导致回退,其余重复赋值没有任何实际作用,只会打乱数值更新的时序。
  • 更新时序混乱:小鸡数量统计、产蛋量累加的逻辑被拆分在两次等待间隔中间,新增小鸡后无法立刻同步到计数,必须等完当前等待周期才会刷新计数,进一步放大了数值不同步的问题。
修复步骤
  1. 删除所有EggNumber = OldEggNumber的冗余赋值,尤其是循环开头的强制重置语句,从根源避免当前数值被旧值覆盖。
  2. 修正Start方法里的变量作用域错误,去掉局部变量声明关键字,将初始统计的小鸡数赋值给全局ChickenCount字段。
  3. 简化协程逻辑:每轮等待结束后先刷新当前小鸡总数,直接在EggNumber上累加对应周期的产蛋量(每只鸡每周期产1蛋,直接累加ChickenCount即可,不需要通过OldEggNumber中转),再控制蛋对象的显隐,保证数值更新时序一致。
  4. 如果需要更高频率的数值更新,可以单独抽离小鸡计数逻辑,按帧或者按短间隔刷新,不需要等2秒产蛋周期到了才更新小鸡总数。
修复后完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EggLayer : MonoBehaviour
{
    public GameObject Egg;
    public GameObject Chicken;
    public Text EggText;
    public int EggNumber = 0;
    public float NewEggTime = 2f;
    public int ChickenCount = 0;

    void Start()
    {
        Egg.SetActive(false);
        // 修正局部变量重名问题,直接给全局ChickenCount赋值
        GameObject[] ChickenToFind = GameObject.FindGameObjectsWithTag("Chicken");
        ChickenCount = ChickenToFind.Length;
        
        StartCoroutine("MakeEggVisible");
    }

    void Update()
    {
        EggText.text = EggNumber.ToString("0");
        // 需要更高频率更新小鸡数时,取消下一行注释即可,不需要等协程周期
        // ChickenCount = GameObject.FindGameObjectsWithTag("Chicken").Length;
    }

    IEnumerator MakeEggVisible()
    {
        while (true)
        {
            // 等待产蛋周期
            yield return new WaitForSeconds(NewEggTime);
            
            // 先刷新当前小鸡总数
            ChickenCount = GameObject.FindGameObjectsWithTag("Chicken").Length;
            // 直接累加产蛋量:每只鸡每周期产1个蛋
            EggNumber += ChickenCount;
            
            // 控制蛋的显隐,和数值计算解耦
            Egg.SetActive(true);
            yield return new WaitForSeconds(NewEggTime);
            Egg.SetActive(false);
        }
    }
}

注:后续调整产蛋节奏、蛋的显隐动画时,不要把数值计算逻辑和动画逻辑强绑定,避免新增功能时再次出现数值不同步的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:09:15