我正在建立一个简单的足球点球大战。一旦球击中球门,得分将设置为1并保存该得分。游戏自行重置。如果游戏已自动重置,则应保留分数。问题是,当用户退出游戏并手动重新启动时,先前的得分尚未重置。如果发生这种情况,我希望分数重新设置。
这是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Goalcollide : MonoBehaviour
{
public Text scoretext; // Displays the score on the text
public Text goaltext; // to output goal message once the goal has been scored
public int counter = 0; // Socre counter.
private void Awake()
{
if (PlayerPrefs.GetInt("counter") != 0)
{
counter = PlayerPrefs.GetInt("count");
}
}
void Start()
{
counter = PlayerPrefs.GetInt("count");
//counter = 0;
//scoretext.text = counter.ToString();
}
private void OnCollisionEnter(Collision collisionINFO)
{
if (collisionINFO.collider.name == "Goal Post")
{
counter += 1; // Increments score each time
PlayerPrefs.SetInt("count", counter); // Saves the score
scoretext.text = counter.ToString(); // Displayed score
goaltext.text = "GOALLL"; // Displayed the message.
FindObjectOfType<GameManager>().EndGame(); // The game is reset
}
if (collisionINFO.collider.name != "Plane")
{
FindObjectOfType<GameManager>().EndGame();
}
}
}
答案 0 :(得分:0)
PlayerPrefs
如果您只想在程序执行过程中保存分数,则您不应将其存储在PlayerPrefs中。
首先,您不应该在PlayerPrefs
中存储游戏状态(它用于存储音量或首选控制方案:用户 preferences ),而在第二位置,它是在两次运行之间保留数据的位置。
由于不希望分数数据在两次运行之间保持不变,因此将其存储在最错误的位置。
执行此操作:
public class GameData {
public static int score;
}
您现在有了一个可公开访问的静态变量,该变量将在场景加载边界范围内持久存在,但仅存在于RAM中而不存在于磁盘中。