复刻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
相关产品推荐
相关产品推荐

