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

Unity游戏HighScore脚本开发故障排查求助

高分(HighScore)脚本不更新问题排查与修复

核心问题分析

高分脚本初始显示正常但不随游戏分数更新,本质是高分脚本未感知到分数变化,或更新逻辑未被触发。以下是具体排查方向和修复方案:

排查步骤与修复方案

1. 给计分脚本添加分数变化通知

你的GameScore脚本运行正常,但如果没有对外暴露分数变化的通知机制,GameHighScore根本不知道分数何时更新。给GameScore添加事件回调:

// GameScore.cs
using UnityEngine;
using UnityEngine.UI;

public class GameScore : MonoBehaviour
{
    public Text scoreText;
    private int currentScore;
    // 定义分数变化事件
    public static event System.Action<int> OnScoreUpdated;

    void Start()
    {
        currentScore = 0;
        UpdateScoreDisplay();
    }

    public void AddScore(int value)
    {
        currentScore += value;
        UpdateScoreDisplay();
        // 触发分数变化事件
        OnScoreUpdated?.Invoke(currentScore);
    }

    void UpdateScoreDisplay()
    {
        scoreText.text = currentScore.ToString("D7"); // 保持7位数字格式
    }
}

2. 让高分脚本监听分数变化

修改GameHighScore脚本,订阅GameScore的事件,实时检查并更新高分:

// GameHighScore.cs
using UnityEngine;
using UnityEngine.UI;

public class GameHighScore : MonoBehaviour
{
    public Text highScoreText;
    private int currentHighScore;

    void Start()
    {
        highScoreText = GetComponent<Text>();
        // 读取本地存储的高分,默认值为0
        currentHighScore = PlayerPrefs.GetInt("PlayerHighScore", 0);
        UpdateHighScoreDisplay();
        // 订阅分数更新事件
        GameScore.OnScoreUpdated += CheckAndUpdateHighScore;
    }

    void OnDestroy()
    {
        // 取消订阅,避免内存泄漏
        GameScore.OnScoreUpdated -= CheckAndUpdateHighScore;
    }

    void CheckAndUpdateHighScore(int newScore)
    {
        if (newScore > currentHighScore)
        {
            currentHighScore = newScore;
            // 保存新高分到本地存储
            PlayerPrefs.SetInt("PlayerHighScore", currentHighScore);
            PlayerPrefs.Save();
            UpdateHighScoreDisplay();
        }
    }

    void UpdateHighScoreDisplay()
    {
        highScoreText.text = currentHighScore.ToString("D7");
    }
}

3. 验证EnemyScript的加分调用逻辑

确保EnemyScript在触发加分时,正确调用了GameScore的AddScore方法,比如敌人被销毁时:

// EnemyScript.cs示例片段
void OnDestroy()
{
    // 找到GameScore实例并调用加分
    GameScore scoreSystem = FindObjectOfType<GameScore>();
    if (scoreSystem != null)
    {
        scoreSystem.AddScore(100); // 可根据需求调整加分数值
    }
}

4. 检查GameManager的干扰逻辑

确认GameManager中没有重置高分的错误逻辑,比如游戏重启时误将PlayerPrefs中的高分清零。

额外调试技巧

  • 在GameScore的AddScore方法中添加Debug.Log($"当前分数:{currentScore}"),确认分数确实在增加
  • 在GameHighScore的CheckAndUpdateHighScore方法中添加Debug.Log($"检测到新分数:{newScore},当前高分:{currentHighScore}"),验证事件是否被正确触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:18:21