目录
例子2:在保存窗口大小时,最适合使用 OnDisable 保存值
3.2 EditorUserSettings.Set /GetConfigValue
3.1 EditorPrefs
它是一种可以在 PC 中共享的数据存储方法。 与项目无关,最好在 Unity 编辑器之间共享价值。
存储和访问 Unity 编辑器偏好设置。
On macOS, EditorPrefs are stored in
~/Library/Preferences/com.unity3d.UnityEditor5.x.plist
.
在 Windows 上,EditorPrefs 存储在注册表中,在HKCU\Software\Unity Technologies\UnityEditor 5.x
键之下。
官方API 静态函数:
例子1:保存/读取int值
using UnityEditor;
public class ExampleWindow : EditorWindow
{
int intervalTime = 60;
const string AUTO_SAVE_INTERVAL_TIME = "AutoSave interval time(sec)";
[MenuItem("Window/Example")]
static void Open()
{
GetWindow<ExampleWindow>();
}
void OnEnable()
{
intervalTime = EditorPrefs.GetInt(AUTO_SAVE_INTERVAL_TIME, 60);
}
void OnGUI()
{
EditorGUI.BeginChangeCheck();
//シーン自動保存間隔(秒)
intervalTime = EditorGUILayout.IntSlider("間隔(秒)", intervalTime, 1, 3600);
if (EditorGUI.EndChangeCheck())
EditorPrefs.SetInt(AUTO_SAVE_INTERVAL_TIME, intervalTime);
}
}
例子2:在保存窗口大小时,最适合使用 OnDisable 保存值
using UnityEngine;
using UnityEditor;
public class ExampleWindow : EditorWindow
{
const string SIZE_WIDTH_KEY = "ExampleWindow size width";
const string SIZE_HEIGHT_KEY = "ExampleWindow size height";
[MenuItem("Window/Example")]
static void Open()
{
GetWindow<ExampleWindow>();
}
void OnEnable()
{
var width = EditorPrefs.GetFloat(SIZE_WIDTH_KEY, 600);
var height = EditorPrefs.GetFloat(SIZE_HEIGHT_KEY, 400);
position = new Rect(position.x, position.y, width, height);
}
void OnDisable()
{
EditorPrefs.SetFloat(SIZE_WIDTH_KEY, position.width);
EditorPrefs.SetFloat(SIZE_HEIGHT_KEY, position.height);
}
}
3.2 EditorUserSettings.Set /GetConfigValue
它是可以在项目中共享的数据存储方法。 此处存储的值是加密的。适用于存储密码等个人信息。
这个官方api已经没有任何信息了,过时了(2021.04.20查询的unity2020.1)
3.3 ScriptableObject
如何保存可在项目中共享的数据。 它是一种适用于各种应用程序的存储方法。如果要在团队中共享设置或保存大量数据,请选择此方法。
保存什么
通过Editor扩展生成的Asset数据或者设定文件、编译后作为游戏数据使用,起到一个数据库的作用。
保存ScriptableObject的地方
只要是在Project下面的Assets文件夹里面就可以。如果是专门用于编辑器扩展的ScriptableObject
的话,更倾向于保存在Editor文件夹下面。
使用方法
由于内容很多,所以详细的都在第四章《ScrptableObject》里面介绍。
using UnityEngine;
[CreateAssetMenu]
public class ScriptableObjectTest : ScriptableObject
{
[Range(0, 10)]
public int numbers = 3;
public bool toggle = false;
public string[] strs ;
}