
在 Unity 中加载首选项值时,如果输入的键不存在,则将返回数据类型的默认值,对于浮点数和整数值,默认值为 0,对于字符串为空白。
但是,也可以指定一个自定义默认值,如果该键不存在,将使用该默认值。
例如,当获取音量设置的浮点值时,如果首选项不存在,而不是使用 0,我们可以使用自定义默认值 0.75:
float volume = PlayerPrefs.GetFloat("masterVolume", 0.75f);
这对于加载使用自动默认值可能不好的设置很有用,例如将音量设置为 0,仅仅是因为不存在玩家偏好。
或者,可以在尝试加载之前检查密钥是否存在,使用 Has Key 方法:
float volume;
if (PlayerPrefs.HasKey(key))
{
volume = PlayerPrefs.GetFloat("masterVolume");
}
这对于在尝试对其进行任何操作之前检查密钥是否存在很有用,但是,这个方法有个小问题。
虽然 Has Key 函数将可靠地检查密钥是否存在于 Player Prefs 文件中,但它不会检查存储值的类型。
那么这就意味着,如果将某个键保存为浮点数,例如,使用 Set Float 函数,然后尝试使用其键找到它,则 Has Key 函数将正确找到它,并返回 true,表明存在键在那个名字下。
但是,如果随后尝试使用 Get Int 或 Get String 函数检索键,则不会找到该类型的键,而是使用默认值。
这意味着如果不小心尝试检索错误类型的值,即使先使用 Has Key 函数检查,也会得到一个默认值,就好像它不存在一样。
发生这种情况是因为单个首选项只能存在一个键值,但该键可以是任何一种受支持的类型,字符串、浮点数或整数。这意味着可以用新的数据类型覆盖键,导致任何其他 Get 函数不返回任何内容。