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();
}
}
}
Unity--Xml序列化和反序列化(排行榜實(shí)例)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)灵嫌,“玉大人壹罚,你說(shuō)我怎么就攤上這事∈傩撸” “怎么了猖凛?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绪穆。 經(jīng)常有香客問(wèn)我辨泳,道長(zhǎng),這世上最難降的妖魔是什么玖院? 我笑而不...
- 正文 為了忘掉前任菠红,我火速辦了婚禮,結(jié)果婚禮上难菌,老公的妹妹穿的比我還像新娘试溯。我一直安慰自己,他們只是感情好郊酒,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布遇绞。 她就那樣靜靜地躺著键袱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪试读。 梳的紋絲不亂的頭發(fā)上杠纵,一...
- 那天荠耽,我揣著相機(jī)與錄音钩骇,去河邊找鬼。 笑死铝量,一個(gè)胖子當(dāng)著我的面吹牛倘屹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慢叨,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼纽匙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拍谐?” 一聲冷哼從身側(cè)響起烛缔,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轩拨,沒(méi)想到半個(gè)月后践瓷,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡亡蓉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年晕翠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砍濒。...
- 正文 年R本政府宣布杠河,位于F島的核電站碌尔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏感猛。R本人自食惡果不足惜七扰,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陪白。 院中可真熱鬧颈走,春花似錦、人聲如沸咱士。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)富岳。三九已至苔货,卻和暖如春茧痕,著一層夾襖步出監(jiān)牢的瞬間侵歇,已是汗流浹背爬早。 一陣腳步聲響...
- 正文 我出身青樓荷逞,卻偏偏與公主長(zhǎng)得像媒咳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种远,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 什么是序列化涩澡,反序列化? 序列化就是把數(shù)據(jù)對(duì)象轉(zhuǎn)換成二進(jìn)制流保存為本地文件的過(guò)程坠敷。 反序列化就是把儲(chǔ)存有數(shù)據(jù)信息的...
- Runtime 有什么用妙同? 1.利用Runtime運(yùn)行時(shí),在程序的運(yùn)行過(guò)程中膝迎,動(dòng)態(tài)創(chuàng)建一個(gè)類(lèi) 2.利用Runtim...