我正在制作VR游戏,其中只有一个级别在主场景上,而另一个场景是"结束"使用Restart(重新加载主场景)和Exit Button可以看到游戏Over text Score。
我的问题是,M使用此脚本作为我在下面给出的ScoreManager
脚本。我也希望在结束场景中获得此分数,并使用PlayerPrefs
但主要问题是,当在结束场景点击重新启动时,游戏会重新加载主场景,但该分数仍具有与之前游戏相同的值。我希望它设置为零。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
namespace CompleteProject
{
public class ScoreManager : MonoBehaviour
{
public static int score ; // The player's score.
Text text; // Reference to the Text component.
void Awake()
{
// Set up the reference.
text = GetComponent<Text>();
score = 0;
score = PlayerPrefs.GetInt("Score");
}
void Update ()
{
// Set the displayed text to be the word "Score" followed by the score value.
text.text = "Score: " + score;
PlayerPrefs.SetInt("Score", score);
}
}
}
我还使用DeleteKey(string)
删除了分数,但没有发生任何事情。
答案 0 :(得分:1)
你说你试过DeleteKey(int score)
但它没有用。您的代码不在任何地方都有DeleteKey
功能。如果您不知道如何使用该功能,下面的代码将向您展示如何使用它。如果您确实知道如何使用它,但它在您的问题中没有提到,请在其后面调用PlayerPrefs.Save()
。这应该删除密钥并立即更新。
要在每场比赛后重置分数,请将代码放入OnDisable()
功能。
void OnDisable()
{
PlayerPrefs.DeleteKey("Score");
PlayerPrefs.Save();
}
要在游戏开始时重置它,请像在score
函数中一样获取当前Awake()
,然后将上面的函数更改为OnEnable()
。
答案 1 :(得分:1)
问题仍然存在,您需要获得分数的上一个会话,因此您需要使用以下行将值重置为零来重置保存的值:
public static int score ;
Text text;
void Start(){
PlayerPrefs.SetInt("Score", 0);
// Set up the reference.
text = GetComponent<Text>();
score = 0;
score = PlayerPrefs.GetInt("Score",0);
}
void Update ()
{
// Set the displayed text to be the word "Score" followed by the score value.
text.text = "Score: " + score;
PlayerPrefs.SetInt("Score", score);
}