微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取所有 PlayerPrefs 键来创建 Drop() 函数?

如何解决如何获取所有 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 举报,一经查实,本站将立刻删除。