这是我在统一世界中的第一个测试 2d 游戏的主菜单:
我想保存高分,如果玩家按下“最佳分数”按钮,我想向他们展示目前最好的分数^^,所以我想我需要使用外部文件来保存此类信息并在运行时打开它时间……怎么样?哪种文件最适合执行此操作?
这是我在统一世界中的第一个测试 2d 游戏的主菜单:
我想保存高分,如果玩家按下“最佳分数”按钮,我想向他们展示目前最好的分数^^,所以我想我需要使用外部文件来保存此类信息并在运行时打开它时间……怎么样?哪种文件最适合执行此操作?
除了上面的答案:
PlayerPrefs 不处理和存储自定义类型和集合,除非您将这些类型转换为字符串或其他数据。将所需数据转换为 JSON 并将 JSON 字符串存储在 PlayerPrefs 中,然后在您再次需要时获取并解析该数据非常有用。这样做会增加另一层复杂性,但也会增加另一层保护和加密数据本身的能力。此外,根据 Unity 的文档,Web Player 是目前唯一对 PlayerPrefs 有限制的平台:
每个 Web 播放器 URL 有一个首选项文件,文件大小限制为 1 兆字节。如果超出此限制,SetInt、SetFloat 和 SetString 将不会存储该值并抛出 PlayerPrefsException。
来源: http ://docs.unity3d.com/Documentation/ScriptReference/PlayerPrefs.html
写作:
PlayerPrefs.SetInt("score",5);
PlayerPrefs.SetFloat("volume",0.6f);
PlayerPrefs.SetString("username","John Doe");
// Saving a boolean value
bool val = true;
PlayerPrefs.SetInt("PropName", val ? 1 : 0);
PlayerPrefs.Save();
阅读:
int score = PlayerPrefs.GetInt("score");
float volume = PlayerPrefs.GetFloat("volume");
string player = PlayerPrefs.GetString("username");
bool val = PlayerPrefs.GetInt("PropName") == 1 ? true : false;
最简单的解决方案是使用PlayerPrefs。它有有限的空间和一小部分可以保存的数据(int、float、string),但对于一个简单的游戏来说已经足够了。
如果您需要保存更多空间或更复杂的数据结构,则必须将它们存储在文件系统本身(或者如果您有一些后端支持,则存储在服务器中)。Unity 不为此提供任何内置支持。
C#是这样的
//these variables will send the values in.
public static string exampleString = "hi youtube"; //it needs to be public ans static
public static int exampleInt = 1;
public static float exampleFloat = 3.14;
//these vaibles will collect the saved values
string collectString;
int collectInt;
float collectFloat;
public static void Save () { //this is the save function
PlayerPrefs.SetString ("exampleStringSave", exampleString);
// the part in quotations is what the "bucket" is that holds your variables value
// the second one in quotations is the value you want saved, you can also put a variable there instead
PlayerPrefs.SetInt ("exampleIntSave", exampleInt);
PlayerPrefs.SetFloat ("exampleFloatSave", exampleFloat);
PlayerPrefs.Save ();
}
void CollectSavedValues () {
collectString = PlayerPrefs.GetString ("exampleStringSave");
collectInt = PlayerPrefs.GetInt ("exampleIntSave");
collectFloat = PlayerPrefs.GetFloat ("exampleFloatSave");
)
void Awake () { //this is simialar to the start function
Save ();
CollectSavedValues ();
}
void Update () {
Debug.Log (collectString);
Debug.Log (collectInt);
Debug.Log (collectFloat);
}