如何解决如何获取所有 PlayerPrefs 键来创建 Drop() 函数?
我的游戏中的 Drop 功能有问题。我需要将所有变量设置为 0/null,但是在代码中分别为每个变量创建一个字符串非常耗时且成本高昂。也许有人知道如何在 PlayerPrefs 中获取一组键?
public void Drop()
{
PlayerPrefs.SetInt("AntivirusLevel",0);
PlayerPrefs.SetFloat("cpu",0);
PlayerPrefs.SetInt("cpulvl",0);
PlayerPrefs.SetFloat("GPU",0);
PlayerPrefs.SetInt("GPUlvl",0);
PlayerPrefs.SetInt("RAM",0);
PlayerPrefs.SetInt("HDD",0);
PlayerPrefs.SetInt("MB",0);
PlayerPrefs.SetInt("Level",0);
PlayerPrefs.SetInt("Lastscore",0);
PlayerPrefs.SetString("Training",null);
PlayerPrefs.Save();
SceneManager.LoadScene(0);
}
解决方法
没有内置方法可以获取 Unity 中所有现有 PlayerPref 的列表(此外,您还需要每个人的类型)。
有一个插件可以在编辑器中做到这一点,也许你可以使用它并修改它以在运行时也能工作:https://assetstore.unity.com/packages/tools/playersprefs-editor-and-utilities-26656
第二种选择是手动搜索保存首选项的位置(例如,在 Windows 中,它在注册表中)。您可以在此处查看首选项在每个平台中的保存位置:https://docs.unity3d.com/ScriptReference/PlayerPrefs.html
最后,这将是我的建议 - 您可以使用 PlayerPrefs.DeleteAll()
删除所有播放器首选项。但是,这将删除它们并且不会像在您的代码中那样设置默认值,因此您必须更改访问播放器首选项的代码并为其提供默认值。
public void Drop()
{
PlayerPrefs.DeleteAll(); // Remove all keys so we can get their default values
PlayerPrefs.Save();
SceneManager.LoadScene(0);
}
public int MyGetInt(string prefName) {
return PlayerPrefs.GetInt(prefName,0);
}
public float MyGetFloat(string prefName) {
return PlayerPrefs.GetFloat(prefName,0f);
}
private void Update() {
Debug.Log("CPU Value: " + MyGetFloat("CPU")); // When using this instead of directly PlayerPrefs.GetFloat,then it will return 0 if the value doesn't exist,including after Drop() was run
}
请注意,这将删除您在游戏中的所有密钥。如果您只想重置某个特定的键列表,则无法避免在 JSON 文件、数组或其他一些结构中创建它的列表。程序无法猜测您要重置哪些值,哪些不要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。