在 Unity 中,给自定义 class 加上 [System.Serializable] 这个关键字,就可以让它在 Inspector 面板上以序列化的形式展示出来。

我对 Unity 序列化的理解是:它相当于替你完成了 new 和初始化的动作,让你不必手动去 new 一个 class 对象。除此之外,序列化也可以用于磁盘读写和网络传输。

示例如下:

using UnityEngine;
using System.Collections;
//[System.Serializable]
public class PlayerData
{
    public int hp;
    public int speed;


}


public class NewBehaviourScript : MonoBehaviour {
    public PlayerData playerdata;



	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {
        Debug.Log(playerdata.hp);

	}
}

如果不加 [System.Serializable],那你就必须手动 new 一个 playerdata 实例化对象。

需要注意的是,声明并不等于实例化,声明出来的东西更像是一个指针。所以在 PlayerData 上加上可序列化之后,就能直接在 Inspector 面板的脚本组件里编辑这个对象了。

从 C++ 的角度来理解序列化其实也很直观:对象本质上就是一段内存片段,把这段内存片段保存下来,这个对象也就被保存下来了。