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

Unity中C# Void内数值无法更新的问题排查求助

问题排查与修复方案

1. 第一个致命错误:if语句后的多余分号

你的代码里if(Coffee >= CoffeeToUpgrade);末尾多了个分号,这会让if条件判断后直接结束,后面的大括号代码块完全不受条件限制,不管Coffee够不够都会执行。这不仅逻辑错误,还会导致Coffee不足时变成负数,同时可能因为后续的除法错误中断流程。

修复:删掉分号,让大括号成为if的执行块:

public void AddPlantages()
{
    if(Coffee >= CoffeeToUpgrade) // 移除末尾分号
    {
        Coffee -= CoffeeToUpgrade;
        Plantages++;
        DynamicPrice = 1f / Plantages;
        CoffeeToUpgrade += (int)(CoffeeToUpgrade * DynamicPrice);
        string CPP = "Price: " + CoffeeToUpgrade;
        PlantagePrice.text = CPP;
    }
}

2. 整数除法导致数值无法更新

所有变量都是int类型,1 / Plantages属于整数除法:

  • 初始Plantages为0时,第一次执行会触发除以0的运行时错误,直接中断方法,后续代码全不执行
  • 当Plantages > 1时,1/Plantages的结果是0(比如1/2=0,整数除法会舍弃小数部分),导致CoffeeToUpgrade += CoffeeToUpgrade * DynamicPrice等价于加0,数值完全没有变化

修复:

  • 将DynamicPrice改为float类型(不要用int)
  • 计算时用浮点型常量(比如1f)触发浮点除法,最后再转int赋值给CoffeeToUpgrade:
// 修改变量定义
public float DynamicPrice;

// 方法内的计算逻辑
DynamicPrice = 1f / Plantages;
CoffeeToUpgrade += (int)(CoffeeToUpgrade * DynamicPrice);

3. 额外优化建议

  • 调整代码顺序,先递增Plantages再计算价格(避免初始0值的除法问题):
// 把Plantages++移到除法前面
Plantages++;
DynamicPrice = 1f / Plantages;
  • 加日志输出验证数值变化,方便排查:
Debug.Log($"当前Coffee: {Coffee}, 升级所需: {CoffeeToUpgrade}, 种植园数量: {Plantages}");
  • 检查PlantagePrice是否正确绑定了Unity的Text组件,确保UI能同步显示更新后的值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:07:26