请问怎样在Unity的无尽跑酷小游戏中添加分数?

我正在尝试做一个无尽跑酷的小游戏,当玩家撞到一个道具时,将分数加上1000。在我的游戏管理器中,我写了如下的代码:

private float currentScore = 0;
    void Update(){
        if(!isGameEnded){
            currentScore = Time.timeSinceLevelLoad * 10f;
            if(scoreBonus){
                currentScore += 1000;
                scoreText.SetText(currentScore.ToString("0"));
                scoreBonus = false;
            }
            scoreText.SetText(currentScore.ToString("0"));
        }
    }

同时,我有一个 itemCollision 脚本,在其中我更新了我的 GameManager 的 scoreBonus 变量:

void OnCollisionEnter(Collision collisionInfo){
        if(collisionInfo.collider.tag == "Player"){
            FindObjectOfType<PlayerCollision>().ActivateInvicibility(invisibilityDuration);
            FindObjectOfType<GameManager>().scoreBonus = true;
            Destroy(gameObject);
        }
    }

问题是,当我撞到这个道具时,分数变化得非常快,我看到 +1000 出现了,但是很快又消失了。我已经尝试过记录下分数,一切似乎都很正常,它的值在log中会发生变化,但在我的分数文本中却不会改变。

共以下 1 个回答

  • fewds 2023年4月11日 上午9:55


    这个问题就出在这一行。

    currentScore = Time.timeSinceLevelLoad * 10f;

    这会覆盖您对当前分数所做的任何更改,因为分数是计算的结果。
    为了简单起见,您可以创建另一个变量来存储额外的分数,然后在显示时将两者相加。

    
    private float currentScore;
    private float bonusScore;
    
    ..
    
    if (scoreBonus)
    {
        bonusScore += 1000;
    }
    
    scoreText.SetText((currentScore + bonusScore).ToString("0"));
    

    0 赞同 0 条回复

# 回答此问题

您的电子邮箱地址不会被公开。 必填项已用*标注