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; } }
为什么你之前的尝试没生效?
大概率是这两个原因:
- 只修改了Update里的实时分数计算,没同步修改OnGameOver里的最高分逻辑,导致游戏结束时显示的还是旧规则的分数
- 误用了时间变量(比如想用
Time.deltaTime累加但没做正确的变量存储),不如直接用Time.timeSinceLevelLoad乘系数的方式简单直接
替换代码后测试下,分数就会每秒稳定减少150,还不会出现负数的情况~
内容的提问来源于stack exchange,提问作者TheNewbie
相关产品推荐
相关产品推荐

