在 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++ 的角度来理解序列化其实也很直观:对象本质上就是一段内存片段,把这段内存片段保存下来,这个对象也就被保存下来了。