【问题标题】:highscore update not working in 2dunity game高分更新在 2dunity 游戏中不起作用
【发布时间】:2018-09-15 00:01:51
【问题描述】:

我是 2D Unity 游戏开发的初学者,这是我的第一款游戏。在这个游戏中,我有两个场景——一个是游戏场景,另一个是游戏结束场景。当我尝试在游戏结束场景中显示高分时,它对我不起作用。这是我尝试过的代码:

public class highscore : MonoBehaviour {
    public Text hscore;

    private void Start() {
        hscore.text = PlayerPrefs.GetInt("highscore", 0).ToString();
    }

    public void Update() {
        if (GetComponent<Score>().score > PlayerPrefs.GetInt("highscore")) { 
            PlayerPrefs.SetInt("highscore", GetComponent<Score>().score);
            hscore.text = GetComponent<Score>().score.ToString();
        }
    }
}

它将游戏冻结在场景中,没有其他东西可以解决这个问题。有谁知道问题是什么?任何帮助都会很有用。提前致谢。

【问题讨论】:

标签: c# unity3d


【解决方案1】:

我建议您完全重新编写代码。例如,为什么您需要额外的屏幕来显示高分。场景之间的切换在某种程度上是一项昂贵的操作。即使您确实需要两个屏幕,您也应该确保将“显示高分”逻辑放在更新方法之外。现在到解决方案: 处理这个问题的最简单方法是使用PlayerPrefs 来更新高分,就像PlayerPrefs.SetInt("HighScore", yourScore); 你可以得到这样的值: int highScore = PlayerPrefs.GetInt("HighScore", 0); 第二个参数是可选的,如果在此之前没有设置HighScore,则返回。另一件事是您可以使用弹出窗口来显示高分。这样您就不必在场景之间切换。

【讨论】:

  • 我会尝试你提到的弹出方法,谢谢你的回答。
【解决方案2】:

检查统一的 PlayerPrefs 类:

https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

如您所见,GetInt()SetInt() 从字典中获取值。您必须将这些值保存在磁盘上以便在场景之间传递它们(或者在您再次加载游戏时检索它们)。

你在卸载旧场景之前使用Save()吗?你的分数也来自前一个场景?如果是,您使用的是DontDestroyOnLoad(Object target) 还是只是“ShowScore”场景中的一个脚本?如果您没有从第一个场景中传递它,它将只有默认值,而不是您的分数。希望我很清楚。

【讨论】:

  • 感谢您的建议,我会试试这个save() 方法
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 2014-10-02
  • 2021-07-18
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多