我遇到了以下问题:我有一个钓鱼游戏。到目前为止,如果我玩游戏,我可以开始钓鱼,捕获2,3,4多条鱼,一切都很好。
但是,如果我想暂停游戏(按下ESC或我放置在场景中的按钮),我的分数会重置。另外,即使我暂停游戏或进入商店按钮,我也不知道如何保存我的分数。
启动功能
void Start()
{
PlayerPrefs.GetInt("Pesti");
NrPesti.text = PlayerPrefs.GetInt("Pesti").ToString();
PlayerPrefs.GetInt("Viermisori");
NrViermisori.text = PlayerPrefs.GetInt("Viermisori").ToString();
PlayerPrefs.GetInt("Score");
Score.text = PlayerPrefs.GetInt("Score").ToString();
PlaySound(0);
}
更新功能:
void Update()
{
Debug.Log(NrViermisori.text);
Debug.Log(NrPesti.text);
Debug.Log(Score.text);
if (NrPesti.name =="Pesti")
{
NrPesti.text = "Lovers: " + NrPesti.text;
}
PlayerPrefs.SetString("NrPesti", NrPesti.text);
if(NrViermisori.name == "Viermisori")
{
NrViermisori.text = "Beasts: " + NrViermisori.text;
}
PlayerPrefs.SetString("Viermisori", NrViermisori.text);
if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit();
}
答案 0 :(得分:1)
在您的更新方法中,尝试在您检测Escape Press的代码中添加一些内容。
if (Input.GetKeyDown(KeyCode.Escape)){
PlayerPrefs.setInt("Score", Int32.Parse(Score.text));
//Verify property is saved
Int scoreTest = PlayerPrefs.getInt("Score");
Debug.Log(scoreTest);
Application.Quit();
}
祝你好运
答案 1 :(得分:1)
我认为这不是通过直接对span {
display: inline-block;
}
进行操作来保存/加载分数的正确方法。
如果您想保存并加载您的分数,请创建一个单独的变量Text.text
来存储您的分数,然后在您的UI元素中使用您的分数。
例如,这解释了如何在运行时保存分数:
score
并在您的UI类中使用您的分数:
public class Score: MonoBehaviour {
public int score = 0;
// Use this for initialization
void Start () {
// get the score when this gameObject initialized
score = PlayerPrefs.GetInt("Player Score");
}
// Update is called once per frame
void Update () {
// this is how you set your score to PlayerPrefs
if (Input.GetKeyDown(KeyCode.Escape)) {
PlayerPrefs.SetInt("Player Score", score);
}
}
// this is an public function to be used
// outside of the class to update score
public void UpdateScore(int amount) {
score += amount;
}
}
不要忘记public class DisplayScore : MonoBehaviour {
public Text scoreText;
public Score playerScore;
// Use this for initialization
void Start () {
// get your Score component here or just drag it in inspector
}
// Update is called once per frame
void Update () {
// this updates the score at every frame
scoreText.text = playerScore.score.ToString();
}
}
,以这种方式保存/加载分数会容易得多。
通常,您不需要拨打using UnityEngine.UI
因为数据会在游戏退出时自动写入磁盘(它会在PlayerPrefs.Save()
中自动调用),但您可能需要在在程序崩溃或其他意外情况下,某些点(即检查点)。
答案 2 :(得分:0)
您应该有一种GameManager
课程,您可以在适当的attributes
中存储您需要记住的所有内容。当您启动游戏时,您将创建GM的实例并在游戏逻辑中引用此对象。像分数这样的东西应该在GM中存储和处理。这样你就可以确保在比赛还活着时“保存”你的分数。