Unity3D中整数金币值单次通关应加5却实际加10是什么原因?
问题排查方向
- 检查
CoinNumber属性的实现逻辑
这是最匹配你描述现象的原因:如果CoinNumber的set访问器里写了额外的累加逻辑,比如:
当你执行private int _coinNum; public int CoinNumber { get => _coinNum; set => _coinNum = value + 5; }coins.CoinNumber += 5时,实际运行逻辑等价于coins.CoinNumber = 原有金币数 +5,触发set访问器后会再额外加5,最终单次执行就会总共加10,和你看到的“直接增加10、没有两次加5日志”的现象完全吻合。你可以在加金币的代码行前后打断点,分别读取coins.CoinNumber的实际值验证该问题。 - 排查脚本重复实例问题
如果你的通关判断脚本因为DontDestroyOnLoad设置没有在上一关结束时销毁,第二关加载时又生成了新的同类型脚本实例,两个实例的HasClickedOk都是独立的成员变量,会各自判定通关条件成立,各执行一次加5逻辑。你可以在加金币的代码前插入日志验证:
如果日志输出了两次不同的实例ID,就属于该问题。Debug.Log($"执行加金币操作,脚本实例ID:{this.GetInstanceID()}"); - 检查其他关联的金币修改逻辑
确认你有没有其他监听了关卡通关事件的全局脚本、或者关卡结算逻辑里也写了加5金币的代码,两处逻辑同时触发总增量就会变成10。你可以在CoinNumber的set方法里加断点,查看调用栈里有多少处触发了金币值修改。 - 确认关卡切换的数值继承逻辑
检查你进入第二关时,是否没有正确清空上一关的临时结算变量,导致第一关的5金币奖励和第二关的5金币奖励叠加展示,被你误认为是单次加了10。
内容的提问来源于stack exchange,提问作者The Other Guy
相关产品推荐
相关产品推荐

