如何将字符串数组保存到 Unity 中的 PlayerPrefs 中?

Som*_*Guy 2 unity-game-engine

我有一个数组,我想将其保存到 PlayerPrefs。我听说,我可以这样做:

PlayerPrefs.SetStringArray('title', anArray);
Run Code Online (Sandbox Code Playgroud)

但由于某种原因它不起作用。也许我没有使用像这样的库using UnityEngine.PlayerPrefs;

有人能帮我吗?

提前致谢

der*_*ugo 7

你不能。PlayerPrefs不支持数组。

但是你可以使用特殊的分隔符并执行例如

PlayerPrefs.SetString("title", string.Join("###", anArray));
Run Code Online (Sandbox Code Playgroud)

然后供阅读使用

var anArray = PlayerPrefs.SetString("title").Split(new []{"###"}, StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)

或者,如果您知道内容,特别是从未使用过哪个字符,您也可以使用单个字符,例如

PlayerPrefs.SetString("title", string.Join("/n", anArray));
Run Code Online (Sandbox Code Playgroud)

然后供阅读使用

var anArray = PlayerPrefs.SetString("title").Split('/n');
Run Code Online (Sandbox Code Playgroud)

是的,正如 TEEBQNE 提到的那样,PlayerPrefsX.cs这可能是造成混乱的根源。

但我不会推荐它!它只是将所有不同的输入类型转换byte[]为 Base64 字符串。

int[]这对于、等来说可能很酷bool[],但string[]这样做绝对效率低下,因为字符串的 Base64 字节表示比字符串本身长得多!

如果您不能依赖字符串内容并且无法确定分隔符序列实际上不是任何字符串的内容,那么它可能是一个有效的替代方案。

  • @Some-Guy 正如所说,使用它并不好..如果你真的想这样做 - 反对所有建议..那么你只需转到 TEEBQNE 的链接并将 `PlayerPrefsX.cs` 脚本的内容复制为新的脚本到你的项目中..我不会,而是使用提到的加入/拆分,这样更有效 (2认同)