序列化存档之备忘脚本

序列化存档涉及的参数比较多,猛地一下始终是记不住。花时间把比较完整的代码记下来,并做好注释,这样就比较方便以后的使用。

using UnityEngine;
using System.Collections;
using System;
using System.IO;
using System.Collections.Generic;
using System.Xml;
using System.Runtime.Serialization.Formatters.Binary;
/// <summary>
/// 存档
/// </summary>
public class SaveData : MonoBehaviour {
    string data=Application.dataPath + "/SaveData.dat";

    [Serializable]
    public class SaveDataClass{
        public string ID;//关卡号
        public string name;//关卡名称
        public string  maxScore{ get; set;}//每关的最高分
        public string starLev{ get; set;}//有星级就是通关,没有就是未通关
    }
    public List<SaveDataClass> dataList=new List<SaveDataClass>();

    void Awake() {
        DontDestroyOnLoad (this.gameObject);

        if (File.Exists (data)) {//再次玩时读取存档
            Read ();
        } else {
            ReadXML ();//读取XML关卡数据
        }
    }

    void ReadXML(){
        dataList.Clear();
        TextAsset t = (TextAsset)Resources.Load("SaveData");//XML文件,里面放置所有关卡的数据
        StringReader sr=new StringReader(t.text);
        XmlDocument doc = new XmlDocument();
        doc.Load(sr);
        XmlElement root = doc.DocumentElement;
        XmlNodeList nodes = root.SelectNodes("SaveData");
        for (int i = 0; i < nodes.Count; i++)
        {
            XmlNode node = (XmlElement)(nodes.Item(i));
            SaveDataClass d=new SaveDataClass();
            d.ID = node.Attributes.Item(0).InnerText;
            d.name = node.Attributes.Item(1).InnerText;
            d.maxScore = node.Attributes.Item(2).InnerText;
            d.starLev= node.Attributes.Item(3).InnerText;
            dataList.Add(d);
        }
        Save();
    }

    void Read(){
        FileStream fs = new FileStream(data, FileMode.Open);
        BinaryFormatter bf = new BinaryFormatter();
        dataList = (List<SaveDataClass>)(bf.Deserialize(fs));
        fs.Close();

    }

    //退出游戏或通关时调用
    public void Save(){
        FileStream fs = new FileStream(data, FileMode.Create);
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs,dataList);
        fs.Flush();
        fs.Close();
    }
}
时间: 2024-10-07 20:20:41

序列化存档之备忘脚本的相关文章

【.NET】编程备忘:.Net中的各种序列化

我们知道将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本这正是数据持久化索要做的.而且,不同应用程序之间的通讯需要相互传输数据.那么序列化和反序列化正是为此而生. 序列化和反序列化 所谓序列化就是把对象转换为字节序列的过程称为对象的序列化. 所谓反序列化就是字节序列恢复为对象的过程称为对象的反序列化 那么.net开发中都为我们提供了哪些序列化和反序列化的方式呢?我简单总结了一下,有以下几种: 1.位于System.Xml.Serialization命名空间下的XmlSerializ

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”

linux下常用命令备忘

转自:Linux 命令集锦 linux下查看监听端口对应的进程 # lsof -i:9000 # lsof -Pnl +M -i4 如果退格键变成了:"^h". 终端连接unix删除退格键,按住CTL键同时按delete Linux搜索 # find / -name "xxx.conf" 查看linux是32位还是64位的命令 #file /sbin/init #getconf LONG_BIT #getconf -a 在Linux和Windows下都可以用nslo

Cheat—— 给Linux初学者和管理员一个终极命令行&quot;备忘单&quot;

编译自:http://www.tecmint.com/cheat-command-line-cheat-sheet-for-linux-users/作者: Avishek Kumar原创:LCTT https://linux.cn/article-3760-1.html译者: su-kaiyao原文稍有改动 当你不确定你所运行的命令,尤其是那些使用了许多选项的复杂命令时,你会怎么做?在这种情况下,我们使用man pages来获取帮助.还有一些其它的选择可能包括像‘help’,‘whereis’和

调试android chrome web page简明备忘

必备工具 adb tools.android chrome 先开启手机调试模式 adb forward tcp:9919 localabstract:chromedevtoolsremote 成功会提示 * daemon not running. starting it now on port 5037 * * daemon started successfully * 不成功的话用这个命令再试 adb kill-server 接着打开下面的链接,这里的9919是上面adb命令中指定的 http

Oracle数据库手动恢复备忘日志

最近因为升级了Mac os x 10.10 Yosemite,突然前几天的一个晚上,开机发现就停留在开机界面了,看来BETA果然是不靠谱,然后想到自己这不前几天刚备份完吗,没事,TimeMachine是何等神器,二话不说直接恢复.但是恢复完,我后悔了,一来是忘了昨天晚上还加班呢,加班的成功保留成果所剩无几,关键我这才发现TimeMachine既然不备份虚拟机文件(虚拟机文件30G,估计直接给略过了吧),难怪每次都觉得备份那么快. 不过后悔也没用,重新搭开发环境吧.操作系统WIN7->开发工具VS

activeMQ 备忘

activemq-all-5.5.0.jar:所有MQ JAR包的集合,用于用户系统调用 bin:其中包含MQ的启动脚本 conf:包含MQ的所有配置文件 data:日志文件及持久性消息数据 example:MQ的示例 lib:MQ运行所需的所有Lib webapps:MQ的Web控制台及一些相关的DEMO 1:进入到activemq_install_dir/config目录,有以下几个重要文件 (1)activemq.xml,在此文件中你可以配置activemq的很多东西,比如将消息持久化到数

基于Prism.Windows的UWP开发备忘

以前做UWP开发都是使用MvvmLight,主要是简单易上手,同时也写了很多MvvmLight的开发系列文章: UWP开发必备以及常用知识点总结 UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享 UWP开发之Mvvmlight实践八:为什么事件注销处理要写在OnNavigatingFrom中 UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器.实体手机.PC)中应用的Log等文件 UWP开发之Mvvmlight实践六:MissingMetadataExcept