You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity技术问题:如何将分数每秒递减速度提升至150

解决分数每秒递减150的问题

我来帮你搞定这个分数递减的问题!先拆解下你原代码的逻辑:你用score - Time.timeSinceLevelLoad计算实时分数,Time.timeSinceLevelLoad是关卡加载后流逝的秒数,每秒只会增加1,所以分数自然每秒只减1。要实现每秒减150,只需要给时间值乘上对应系数,同时加个小限制避免分数变成负数就好。

修改步骤

  • 把Update里的分数计算改成Mathf.Max(score - Time.timeSinceLevelLoad * 150, 0),用Mathf.Max确保分数不会低于0
  • 同步修改OnGameOver里的最高分计算,不然游戏结束时显示的分数会和实时分数不一致
  • 保留Mathf.Round保证分数是整数格式

修改后的完整代码如下:

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class GameOver : MonoBehaviour {
    public GameObject gameOverScreen;
    public Text Score;
    public Text Highscore;
    bool gameOver;
    private int score = 12000;
    
    void Start () {
        FindObjectOfType<PlayerController>().OnPlayerDeath += OnGameOver;
    }
    
    public void Update () {
        // 每秒减150,且分数不低于0
        float currentScore = Mathf.Max(score - Time.timeSinceLevelLoad * 150, 0);
        Score.text = Mathf.Round(currentScore).ToString();
        
        if (gameOver) {
            if (Input.GetKeyDown (KeyCode.Space)) {
                SceneManager.LoadScene(1);
            }
        }
    }
    
    void OnGameOver() {
        gameOverScreen.SetActive (true);
        // 同步计算游戏结束时的最终分数
        float finalScore = Mathf.Max(score - Time.timeSinceLevelLoad * 150, 0);
        Highscore.text = Mathf.Round(finalScore).ToString();
        gameOver = true;
    }
}

为什么你之前的尝试没生效?

大概率是这两个原因:

  1. 只修改了Update里的实时分数计算,没同步修改OnGameOver里的最高分逻辑,导致游戏结束时显示的还是旧规则的分数
  2. 误用了时间变量(比如想用Time.deltaTime累加但没做正确的变量存储),不如直接用Time.timeSinceLevelLoad乘系数的方式简单直接

替换代码后测试下,分数就会每秒稳定减少150,还不会出现负数的情况~

内容的提问来源于stack exchange,提问作者TheNewbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:22:36