您有几种解决方案可以做到这一点。
最简单的方法是使用PlayerPrefs。
使用 PlayerPrefs,您可以让 Unity 将数据持久保存到磁盘。
要保存值,请执行以下操作:
PlayerPrefs.SetFloat("Score", scoreCount);
PlayerPrefs.Save();
稍后再读:
var score = PlayerPrefs.GetFloat("Score");
对于偏好值和小数据(如您的分数),这是一个很好的解决方案。
如果您需要存储更大的数据块,另一种解决方案是将数据保存到文件中。要获取 Unity 知道它可以访问的文件夹的路径,无论平台是什么,请像这样获取 persistantDataPath:
Application.persistantDataPath
最后你可以考虑使用服务器或数据库,如果你真的有很多数据,或者如果你需要在线保存它,但我想这不是你现在要求的,所以我不会在这里开发它
编辑,例如在您的代码中,使用属性将 ScoreCount 保存在 playerPrefs 中
public class ShackUp : MonoBehaviour
{
public Text scoreText;
private int ScoreCount
{
get{ return PlayerPrefs.GetInt("Score", 0); }
set{ PlayerPrefs.SetInt("Score", value); }
}
private void OnDestroy()
{
PlayerPrefs.Save();
}
private void Update ()
{
if (Input.GetKeyDown (KeyCode.Escape))
OnbackButtonPressed ();
if (gameOver)
return;
if (Input.GetMouseButtonDown (0))
{
if (PT ())
{
SpawnTile ();
ScoreCount++;
scoreText.text = ScoreCount.ToString ();
}
else
{
EndGame ();
}
}
}
}
编辑:
以下是您评论后的一些精确度
1) 为了让您了解 c# 属性:
是的,我们可以将脚本中的变量 scoreCount 替换为 PlayerPrefs.GetFloat("Score") 行。这会奏效。但是在这个例子中我做了一些不同的事情:我使用了一个属性。它是这样声明的:
private int ScoreCount
{
get{ return PlayerPrefs.GetInt("Score", 0); }
set{ PlayerPrefs.SetInt("Score", value); }
}
看,它就像一个变量:它是私有的,它是一个 int,它的名字是 ScoreCount(约定是在这些的开头使用大写字母,但不是强制性的)
然后,我没有给这个变量一个值,而是给它一个 accessors: 像这样get{ return PlayerPrefs.GetInt("Score", 0); } 这意味着任何时候你写像int a = ScoreCount 这样的东西,它实际上会调用PlayerPrefs.GetInt("Score", 0);你,所以你不必写它。
setter 的工作方式相同。在属性的 set 部分,您始终可以访问名为 value 的变量。因此,如果在您的代码中编写ScoreCount = 3,它实际上会调用set{ PlayerPrefs.SetInt("Score", value); },并在value 变量中使用数字3。
你可以阅读更多关于属性here
总之,您可以致电
scoreText.text = PlayerPrefs.GetInt("Score").ToString ()
但这也一样
scoreText.text = ScoreCount.ToString ()
2)
关于向字符串添加一些文本。这称为字符串连接
文档是here
总而言之,您可以通过以下两种方式做到这一点。
使用“+”运算符添加字符串。由于 "+" 是一个字符串,添加一个 int 并给出一个字符串,所以你不需要再写 toString 了:
scoreText.text = "+" + ScoreCount
如果您需要更复杂的字符串格式化,有点复杂但有用,请使用 string.Format method
scoreText.text = String.Format("+{0}", ScoreCount)
这会将 {0} 替换为 ScoreCount。您可以使用 {1}、{2} ...
添加更多变量