关于Unity的EditorPrefs遇到的坑

来源:互联网 发布:接新娘唱什么歌 知乎 编辑:程序博客网 时间:2024/06/07 04:10
    EditorPrefs和PlayerPrefs都是保存持久层的数据,以键值对的方式存储,都可以保存和获取Int类型、string类型、float类型的数据,其中EditorPrefs中比PlayerPrefs多了一个Bool类型的键值对,即SetBool(string keyName, bool value)和GetBool(string keyName);也可以删除保存的数据,具体的可以看接口API,不再详细描述。

    今天在Unity编辑器环境中,调用了下EditorPrefs.DeleteAll()方法,发现会报异常,其中提示maxGICacheSize >= 5,然后打开Unity时保存的以前打开的项目,全部消失了,如下图:


如果点击OPEN打开以前关闭的项目,项目中的默认场景不再是关闭时保存的场景,而是新建了一个空场景,以前保存的场景并没有删除,如下图:


    有时还设置的其他编译选项也会变动,例如Editor->Preferences...->General选项中的Auto Refresh复选框取消勾选(默认时勾选的),External Tools选项中的设置的Android JDK和SDK路径也清空了……

    所以猜测EditorPrefs中保存了所有编辑器中默认保存的数据,像以前打开的工程、退出时保存的场景、设置的编辑环境等等都保存在EditorPrefs中,估计还会有其他编辑环境的数据,只是没有发现。因此建议不要轻易调用EditorPrefs.DeleteAll()方法,如果EditorPrefs保存了自己定义的键值,可使用EditorPrefs.DeleteKey(string keyName)根据键名来删除数据即可。而PlayerPrefs中的持久层数据是玩家自定义的数据,可以调用PlayerPrefs.DeleteAll()方法。

   以上只是我的个人见解,如果有不妥当的烦请指出。

原创粉丝点击