unity编辑器中的序列化如何理解[SerializeField]特性
之前一直对序列化和[SerializeField]特性不是很理解(若理解有误,拜请指正)
首先序列化是什么,百度如下解释
序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
简单理解,玩游戏存档,会把存档是的玩家信息保存到一个文件中,当下次开启游戏读取存档的时候,可以继续从存档的状态开始玩
Unity编辑器也一样,public 公共属性的值 显示在属性面板中,我们可以任意修改数值(脚本中对应的数值是没有变的),关闭Unity编辑器再次打开的时候,属性的值是我们修改过的值,而不是脚本里赋的初值,说明属性的值”存档“了
存储的位置就是Unity的场景文件,用记事本打开可以查看对应的信息
首先Unity编辑器就是一款软件
当脚本中创建一个public int a = 0;的公共属性
我们就可以在属性面板(Inspector)中对a进行赋值为(例如赋值为2)
我们关闭Unity编辑器
当再次打开编辑器时a的数值为2
说明Unity编辑器已经将公共属性进行序列化(也就是记录下修改的值,类似存档)
[SerializeField] Attribute
强制unity去序列化一个私有域。这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
public class Test : MonoBehaviour {
public int a = 0;
[SerializeField]
int b = 0;
void Update () {
if (Input.GetKeyDown(KeyCode.A))
{
a++;
b++;
}
if (Input.GetKeyDown(KeyCode.B))
{
Debug.LogError("a:" + a);
Debug.LogError("b:" + b);
}
}
}