Unity开发中PurchaseVents方法读取totalCost12、vCountAmount值为0问题咨询
Game_Manager 变量修改后调用PurchaseVents读取为0的故障原因
以下是该问题的几种常见触发场景:
- 实例不匹配:你调用
AddCount、AddPrice方法的Game_Manager对象实例,和调用PurchaseVents的实例并非同一个。继承MonoBehaviour的类不允许直接通过new关键字创建实例,如果你手动new了实例、或者场景中挂载了多个Game_Manager组件,就会出现修改的是A实例的变量,读取的是未经过赋值的B实例的字段,拿到默认值0。你可以在两个修改方法和PurchaseVents中同时打印gameObject.GetInstanceID()确认是否为同一个实例。 - 序列化值覆盖:如果
totalCost12、vCountAmount是public修饰或者标记了[SerializeField]特性,Inspector面板中对应组件的这两个字段初始值设为0,且你调用修改方法的时机早于组件的序列化赋值流程,运行时修改的值会被Inspector的默认值覆盖。你可以在Start方法中打印这两个字段的初始值确认是否被覆盖。 - 执行顺序错误:
PurchaseVents的调用时机早于AddCount、AddPrice的执行时机,方法执行时变量还没有被修改,自然读取到初始值0。可以在三个方法中都加日志打印调用时间戳确认执行顺序。 - 局部变量遮蔽:检查
AddCount、AddPrice方法内部是否声明了和全局变量同名的局部变量,比如方法内写了int totalCost12 = 100而非直接给全局变量赋值,这种情况你在方法中打印的是局部变量的值,实际全局变量并未被修改,后续调用PurchaseVents读取的就是未修改的初始值。
内容的提问来源于stack exchange,提问作者Muhammad Usama
相关产品推荐
相关产品推荐

