概念:
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
实现例子:
写一个MyClass类,提供了可被序列化的属性,如下
using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class MyClass : ScriptableObject
{
public void SetBoolenTest(bool value)
{
boolenTest = value;
DirtyEditor();
}
public void SetIntTest(int value)
{
intTest = value;
DirtyEditor();
}
public void SetStrTest(string value)
{
strTest = value;
DirtyEditor();
}
public void SetStrIndex(int index)
{
strIndex = index;
SetStrTest(strList[index]);
DirtyEditor();
}
private void DirtyEditor()
{
EditorUtility.SetDirty(Instance);
}
public bool BoolenTest { get { return Instance.boolenTest; } }
public int IntTest { get { return Instance.intTest; } }
public string StrTest { get { return Instance.strTest; } }
public int StrIndex { get { return strIndex; } }
[SerializeField]
private bool boolenTest = true;
[SerializeField]
private int intTest = 1;
[SerializeField]
private string strTest = "hello world";
[SerializeField]
private int strIndex = 0;
public string[] strList = new string[] { "str_1", "str_2", "str_3" };
private static MyClass _instance;
public static MyClass Instance
{
get
{
if (_instance == null)
{
_instance = Resources.Load("MyClass") as MyClass;
}
if (_instance == null)
{
_instance = CreateInstance<MyClass>();
AssetDatabase.CreateAsset(_instance, "Assets/Resources/MyClass.asset");
}
return _instance;
}
}
}
测试:
[MenuItem("EditorTools/Test")]
public static void ToolsTest ()
{
var myClass = MyClass.Instance;
myClass.SetIntTest(666);
myClass.SetBoolenTest(false);
myClass.SetStrTest("hello,I am linxinfa");
}
效果如下:
大功告成