using UnityEngine;
public class ScriptSerializeTestMyTools : MonoBehaviour
{
public int id;
public string myname;
public GameObject prefab;
}
脚本可以通过序列化和反序列化来保存游戏数据,话句话说,就是脚本自身并没有保存数据,而是将数据保存在文件中,使用的时候不需要自己重新组织数据,而是通过语言直接访问即可。
游戏脚本挂在 GameObject 上,而 GameObject 属于 SampleScene 游戏场景,所以 Inspector 面板中写入的最终保存在SampleScene.unity 这个文件中。
做一个预制体 Prefab 如图
如果在 Hierarchy 视图中赋值 Prefab 的话,数据将会保存在SampleScene.unity 这个文件中(个人觉得是没有点击Apply)。
如果在 Project 视图中赋值的话,所序列化的数据将会保存在 Prefab.prefab 文件中(Hierarchy 视图中数据也会更改)。
//--查看数据
Unity 可以设置资源编辑器中的保存格式Editor→ProjectSettings→Editor。
其中Mixed 表示混合模式,而Force Binary 表示二进制格式,Force Text 表示所有资源可以使用文本打开(推荐)。
这个设置并不会影响最终游戏的发布效率,反而编辑器模式下查看资源结构会更方便。
Prefab.prefab 或者 SampleScene.unity 文件直接拖入文本编辑器中。序列化的数据和面板中的完全一样。其中 myname 一栏中文转成了Unicode 编码。prefab 这栏保存的是对象的实例id。
//--私有序列化数据
脚本中声明为public 的对象都会支持序列化格式,但是声明为public 的对象外部可以直接访问它,而程序中有些数据希望在代码内部使用,这需要支持私有化序列数据。
using UnityEngine;
public class PrivateSerializeMyTools : MonoBehaviour
{
[SerializeField]
private int id;
[SerializeField]
private string myname;
[SerializeField]
private GameObject prefab;
}
这样又带来一个新的问题,因为对象都设置为private 数据,所以外部都无法访问,如果想使用拓展编辑器来编辑这些数据的话,可以使用 SerializedObject 和 SerializedProperty 来获取设置数据。
using UnityEngine;