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

复刻Jetpack Joyride:场景重置时保存分数并更新更高最高分的方法

解决Jetpack Joyride复刻中的最高分保存问题

首先注意:你当前代码里用的是player.position.x计算分数,但描述里说的是Y轴位置追踪,记得根据实际需求统一轴方向,下面示例以Y轴为例。

实现思路

用Unity的PlayerPrefs来持久化存储最高分(适合这种轻量数据),核心逻辑是:场景初始化时加载已保存的最高分;实时计算当前分数;场景重置前对比当前分数与最高分,更新并保存新的最高分。

修改后的完整代码

using UnityEngine;
using UnityEngine.UI;

public class Score : MonoBehaviour
{
    public Transform player;
    public Text scoreText;
    public Text highScoreText; // 新增:显示最高分的UI文本

    private float currentScore;
    private float highScore;

    void Start()
    {
        // 加载本地保存的最高分,没有的话默认0
        highScore = PlayerPrefs.GetFloat("HighScore", 0f);
        // 更新最高分显示
        UpdateHighScoreText();
    }

    void Update()
    {
        // 用玩家Y轴位置计算当前分数,保留整数格式
        currentScore = Mathf.Floor(player.position.y);
        // 更新当前分数显示,加上"M"后缀
        scoreText.text = currentScore.ToString("0") + "M";
    }

    // 场景重置/玩家死亡时调用这个方法
    public void OnSceneReset()
    {
        // 对比当前分数与最高分
        if (currentScore > highScore)
        {
            highScore = currentScore;
            // 保存新的最高分到本地
            PlayerPrefs.SetFloat("HighScore", highScore);
            // 强制写入磁盘,避免数据丢失
            PlayerPrefs.Save();
            // 更新最高分显示
            UpdateHighScoreText();
        }

        // 这里可以添加场景重置的逻辑,比如加载当前场景
        // SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }

    // 统一更新最高分文本的方法
    private void UpdateHighScoreText()
    {
        highScoreText.text = "最高分: " + highScore.ToString("0") + "M";
    }
}

关键说明

  • PlayerPrefs是Unity自带的轻量持久化工具,适合存储分数、设置这类小数据,数据会保存在本地设备上。
  • OnSceneReset()方法需要你在合适的时机调用:比如玩家碰撞死亡时、触发场景重置的逻辑里,直接调用scoreInstance.OnSceneReset()即可(如果是单例或者直接获取组件)。
  • 如果你坚持用X轴计算分数,把player.position.y改成player.position.x就行。
  • Mathf.Floor()用来取整数分数,避免小数显示,你也可以根据需求调整格式(比如保留一位小数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:15:30