序列化 就是把一个内存对象变为与地址无关的可传输的数据格式,通常是文本格式;反序列化反之。一般情况下,对象序列化指把一个对象用 XML,YAML 或 json 文本表示。 尽管 Unity 场景文件是 yaml 格式的,但并没有提供运行时内置支持。Unity 已内置 json 支持。
现在我要对我之前写的飞碟游戏进行初步的序列化。
实现序列化后,游戏版本信息以及每个关卡的规则信息都选择json文本保存,这里,我把它们保存在游戏根目录下的Data文件夹中:
启动游戏的效果:
接下来就是代码的部分了。
FileManager:
在Scripits文件夹下新建FileManager.cs,它主要有两个工作:1、读取游戏版本信息并返回json;2、在游戏中读取关卡信息并返回json。
代码如下:
using UnityEngine;
using System.Collections;
using Com.Mygame;
public class FileManager : MonoBehaviour {
public string url;
SceneContriller scene = SceneContriller.GetInstance();
void Awake()
{
scene.setFileManager(this); // 注册到场景控制器
LoadGameInfoJson("game_info.json"); // 获取游戏版本等信息
}
// 输入关卡文件名,启动协程读取文件
public void loadLevelJson(string name)
{
url = "file://" + Application.dataPath + "/Data/" + name;
StartCoroutine(LoadLevel());
}
IEnumerator LoadLevel()
{
if (url.Length > 0)
{
WWW www = new WWW(url);
yield return www;
if (!string.IsNullOrEmpty(www.error))
Debug.Log(www.error);
else
scene.stageLevel(www.text.ToString()); // 返回json字符串给scene
}
}
// 输入游戏信息文件名,启动协程读取文件
public void LoadGameInfoJson(string name)
{
url = "file://" + Application.dataPath + "/Data/" + name;
StartC