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

Unity中gems变量无法按预期递增的技术问题求助

问题分析与解决思路

你的核心问题出在值类型的拷贝特性,以及可能的数值显示格式化问题,以下是具体分析和修复方案:

问题根源

  1. 值类型独立拷贝:float是值类型,你在脚本开头定义的private float gems = GameCtrl.instance.gems;只是复制了GameCtrl中gems的初始值(0.0f)到本地变量。后续对本地gems的修改完全独立于GameCtrl.instance.gems,两者互不影响。
  2. 数值显示截断:即使本地gems成功递增到0.1,直接用Debug.Log(gems)或拼接字符串时,可能因为默认格式被截断显示为0(比如Unity的Debug日志默认对小数位数显示有限制)。

修复方案

直接操作全局的GameCtrl.instance.gems,避免值拷贝的问题,同时格式化数值显示确保小数正常输出:

// 移除本地的gems变量,直接操作全局实例的gems
private float gemsInc = 0.1f;

private void Start(){
    StartCoroutine(IncrementGems());
}

IEnumerator IncrementGems() { // 目标:每10秒增加0.1宝石
    while (true)
    {
        yield return new WaitForSeconds(10);
        // 直接修改全局宝石数值
        GameCtrl.instance.gems += gemsInc;
        float currentGems = GameCtrl.instance.gems;
        // 格式化输出确保小数可见
        Debug.Log(currentGems.ToString("F1"));
        // UI文本也格式化显示
        gemAmount.text = "x" + currentGems.ToString("F1");
    }
}

额外检查点

  • 确认GameCtrl的单例instance已正确初始化:在GameCtrl的Awake方法中必须赋值instance = this;,否则会出现空引用或未初始化的问题。
  • 确认挂载此脚本的GameObject处于激活状态,协程才能正常启动并循环执行。
  • 检查是否有其他脚本修改了GameCtrl.instance.gems(你提到这是唯一使用gems的地方,但需确认是否包含其他脚本的操作)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:25:25