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
相关产品推荐
相关产品推荐

