PlayerPrefs 无法在 Android 上运行
Posted
技术标签:
【中文标题】PlayerPrefs 无法在 Android 上运行【英文标题】:PlayerPrefs not working on android 【发布时间】:2018-02-27 23:47:22 【问题描述】:我设法在我的 android 应用中添加了一个分数和一个高分计数器。一切都很好,在 Unity 中运行良好。我构建了我的应用程序并想在我的手机上对其进行测试,但是使用 PlayerPrefs 保存的高分计数器不会显示...有很多方法,但没有任何效果:(有什么想法吗?
这是我的代码
public class Score : MonoBehaviour
public Transform Charakter;
public Text scoreText;
public Text HighscoreText;
public void Start()
HighscoreText.text = PlayerPrefs.GetString("HighScore");
PlayerPrefs.Save();
private void Update()
scoreText.text = Charakter.position.x.ToString("0");
int score = int.Parse(scoreText.text);
int highscore = int.Parse(PlayerPrefs.GetString("HighScore"));
if (score > highscore)
PlayerPrefs.SetString("HighScore", scoreText.text);
PlayerPrefs.Save();
【问题讨论】:
【参考方案1】:您在没有默认值的情况下调用PlayerPrefs.GetString("HighScore")
,因此如果尚未保存高分,它将返回""
。由于您在保存之前检索了高分,因此您可能遇到了FormatException: Input string was not in a correct format.
异常,因为它正在将“”返回给无效输入的int.Parse()
调用。您应该将该行切换到
int highscore = int.Parse(PlayerPrefs.GetString("HighScore", "0"));
更好的是,将所有内容存储为 int 并将 int 转换为文本字符串,这样更安全。在本地跟踪分数和高分,这样您就不必每帧都从 playerprefs 中检索高分!
public class Score : MonoBehaviour
public Transform Charakter;
public Text scoreText;
public Text HighscoreText;
private int Score;
private int HighScore;
public void Start()
HighScore = PlayerPrefs.GetInt("HighScore", 0);
HighScoreText.text = HighScore.ToString();
private void Update()
Score = Mathf.FloorToInt(Charakter.position.x);
scoreText.text = Score.ToString();
if (Score > HighScore)
HighScore = Score;
HighScoreText.text = HighScore.ToString();
PlayerPrefs.SetInt("HighScore", HighScore);
PlayerPrefs.Save();
【讨论】:
感谢您的帮助,但它并没有保存高分。它只显示当前分数。我试图解决它但没有:/你有什么想法吗? 您是否在编辑器中验证了此功能,并且仅在 Android 上失败?另外,当您说“仅显示当前分数”时,显示是什么意思?文本元素?如果是这种情况,HighScoreText.text = HighScore.ToString();
行仍应导致显示“0”,这可能意味着您缺少对 HighScoreText 的引用。您可以尝试在 Start()
方法的末尾添加一个 Debug.Log(HighScore)
并查看它正在加载什么(可能使用默认值 -1
以便您知道它是否找不到它)。
我添加了 Debug.Log,它显示为 0。我的意思是文本元素 Highscore.text 显示的是当前分数,而不是 HighScore。我也收到此错误: NullReferenceException: Object reference not set to an instance of an object Score.Update () (at Assets/Scripts/Score.cs:29)... HighscoreText.text = HighScore.ToString();
首先,我搞砸了,忘记更新 HighScore playerpref 保存以使用 SetInt()
而不是 SetString()
,所以我的答案中已经更新了。其次,如果您获得该空引用,则意味着您的 HighScoreText 字段没有对文本元素的引用。您确定在检查器中正确分配了它吗?因为您在保存到播放器首选项之前遇到了该错误,所以它将无法完成该方法并完成保存,这可能是您没有看到保存的原因。以上是关于PlayerPrefs 无法在 Android 上运行的主要内容,如果未能解决你的问题,请参考以下文章