Unity无尽跑酷游戏拾取道具加1000分后分数异常消失问题
跑酷游戏道具加分后分数复原问题解决
问题根源
你的GameManager代码里,Update方法每次都会将currentScore重新赋值为Time.timeSinceLevelLoad * 10f——这意味着哪怕你在scoreBonus分支里给分数加了1000,紧接着的scoreText.SetText(currentScore.ToString("0"))又会把UI显示回重置后的基础分数,所以加分只是短暂闪现,立刻被覆盖。
修复方案
把分数拆分为基础时间分数和累加奖励分数两部分,避免每次Update重置总分数。修改后的代码如下:
GameManager 代码调整
private float currentScore = 0; private int totalScoreBonuses = 0; // 存储所有累加的奖励分数 void Update(){ if(!isGameEnded){ // 计算基于游戏时长的基础分数 float baseTimeScore = Time.timeSinceLevelLoad * 10f; // 总分 = 基础分 + 累计奖励分 currentScore = baseTimeScore + totalScoreBonuses; scoreText.SetText(currentScore.ToString("0")); } } // 公开方法:添加奖励分数 public void AddScoreBonus(int bonusAmount){ totalScoreBonuses += bonusAmount; }
道具碰撞脚本调整
不再通过scoreBonus变量触发加分,直接调用上面的AddScoreBonus方法:
void OnCollisionEnter(Collision collisionInfo){ if(collisionInfo.collider.tag == "Player"){ FindObjectOfType<PlayerCollision>().ActivateInvicibility(invisibilityDuration); FindObjectOfType<GameManager>().AddScoreBonus(1000); Destroy(gameObject); } }
逻辑说明
- 基础分数依然随游戏时长增长,但总分数会加上所有拾取道具获得的奖励分,奖励分不会被每次
Update重置。 - 用专门的方法处理加分,比通过布尔变量触发更直观,也更容易扩展(比如后续不同道具加不同分数)。
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

