Unity--Xml序列化和反序列化(排行榜實(shí)例)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.Linq;
using System.Xml.Linq;
using System.IO;
using System.Xml.Serialization;

public class XmlRecord : MonoBehaviour {

    [System.Serializable]   //讓類(lèi)變成在編輯器中可見(jiàn)
    
    public class MyScore:System.IComparable{    //繼承IComparable接口可以變成可比較的類(lèi)
        public int CompareTo(object obj)    //實(shí)現(xiàn)接口的方法
        {
            MyScore my = (MyScore)obj;
            if(this.Score < my.Score){
                return -1;
            }else{
                return 1;
            }
        }
        public string Name;
        public int Score;
        public MyScore(string n,int s){     //構(gòu)造器
            Name = n;
            Score = s;
        }
        public MyScore(){
            
        }
    }
    public List<MyScore> myScore = new List<MyScore>();         //儲(chǔ)存分?jǐn)?shù)和姓名的鏈表
    private bool isChangeList = false;      //判斷鏈表是否變化
    public void AddMyScore(string n,int s){         //往鏈表中添加數(shù)據(jù)
        MyScore my = new MyScore(n,s);
        if(myScore.Count < 10){         //排行榜只取前十位,所以在前十個(gè)加的時(shí)候一定可以直接加進(jìn)去
            myScore.Add(my);
            isChangeList = true;
        }else{
            if(myScore[9].Score < my.Score){        //否則要和第十個(gè)比較大小,如果比第十個(gè)大,則替換他
                isChangeList = true;
                myScore[9] = my;
            }
        }
        myScore.Sort();         //排序

        myScore.Reverse();      //反轉(zhuǎn)
    }
    void OnApplicationQuit(){       //當(dāng)游戲退出的時(shí)候
        print("Quit");
        if(isChangeList){
            System.Type type = typeof(List<MyScore>);       //先獲取要序列化的類(lèi)型
            XmlSerializer xs = new XmlSerializer(type);     //list與序列化綁定
            FileStream fs = null;       //建立空的文件流
            try         //捕獲異常
            {
                fs = new FileStream(Application.persistentDataPath + "/Score.xml", FileMode.Create);        //新建一個(gè)xml文件,如果存在就覆蓋,不存在就創(chuàng)建
            }
            catch (System.Exception e)
            {
                Debug.LogError(e);
            }
            finally
            {
                StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);      //使得xml字符編碼為UTF8
                xs.Serialize(sw, myScore);      //進(jìn)行序列化
                sw.Close();         //使用完關(guān)閉
                fs.Close();
            }
        }
        
    }
    // Use this for initialization
    void Start () {
        Init();
    }
    void Init(){
        Debug.Log(Application.persistentDataPath);      //安卓路徑,關(guān)鍵點(diǎn)

        System.Type type = typeof(List<MyScore>);
        XmlSerializer xs = new XmlSerializer(type);

        if (File.Exists(Application.persistentDataPath + "/score.xml"))
        {
            print("存在文件");
            FileStream fs = null;
            try
            {
                fs = new FileStream(Application.persistentDataPath + "/Score.xml", FileMode.Open);      //打開(kāi)文件獲取文件流
            }
            catch (System.Exception e)
            {
                Debug.LogError(e.Message);
            }
            finally
            {
                myScore = (List<MyScore>)xs.Deserialize(fs);        //進(jìn)行反序列化
                fs.Close();
            }

        }
        else
        {
            print("不存在文件");

            myScore.Add(new MyScore("未命名", 0));
            myScore.Add(new MyScore("未命名1", 1));
            myScore.Add(new MyScore("未命名2", 2));
            myScore.Add(new MyScore("未命名3", 3));
            FileStream fs = null;
            try
            {
                fs = new FileStream(Application.persistentDataPath + "/Score.xml", FileMode.Create);
            }
            catch (System.Exception e)
            {
                Debug.LogError(e);
            }
            finally
            {
                StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
                xs.Serialize(sw, myScore);
                sw.Close();
                fs.Close();
            }

        }
    }
    // Update is called once per frame
    void Update () {
        if(Input.GetMouseButtonDown(0)){
            string name = (char)Random.Range(48,97) + "";
            int score = Random.Range(0,100);
            AddMyScore(name,score);
            print("玩家 "+name+" 獲得了 "+score);
        }
        if(Application.platform == RuntimePlatform.Android && (Input.GetKeyDown(KeyCode.Escape))){      //安卓的退出鍵
            Application.Quit();
        }
        if (Application.platform == RuntimePlatform.Android && (Input.GetKeyDown(KeyCode.Home)))        //安卓的Home鍵
        {
            Application.Quit();
        }
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末钉答,一起剝皮案震驚了整個(gè)濱河市芋浮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啼辣,老刑警劉巖邻薯,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裙戏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡厕诡,警方通過(guò)查閱死者的電腦和手機(jī)累榜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灵嫌,“玉大人壹罚,你說(shuō)我怎么就攤上這事∈傩撸” “怎么了猖凛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绪穆。 經(jīng)常有香客問(wèn)我辨泳,道長(zhǎng),這世上最難降的妖魔是什么玖院? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任菠红,我火速辦了婚禮,結(jié)果婚禮上难菌,老公的妹妹穿的比我還像新娘试溯。我一直安慰自己,他們只是感情好郊酒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布遇绞。 她就那樣靜靜地躺著键袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪试读。 梳的紋絲不亂的頭發(fā)上杠纵,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天荠耽,我揣著相機(jī)與錄音钩骇,去河邊找鬼。 笑死铝量,一個(gè)胖子當(dāng)著我的面吹牛倘屹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慢叨,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼纽匙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拍谐?” 一聲冷哼從身側(cè)響起烛缔,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轩拨,沒(méi)想到半個(gè)月后践瓷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年晕翠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砍濒。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淋肾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出爸邢,到底是詐尸還是另有隱情樊卓,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布杠河,位于F島的核電站碌尔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏感猛。R本人自食惡果不足惜七扰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陪白。 院中可真熱鬧颈走,春花似錦、人聲如沸咱士。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)富岳。三九已至苔货,卻和暖如春茧痕,著一層夾襖步出監(jiān)牢的瞬間侵歇,已是汗流浹背爬早。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工柑蛇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苟耻,地道東北人吱瘩。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓荷逞,卻偏偏與公主長(zhǎng)得像媒咳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种远,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容