1.XML 格式,这里我使用这样的。目录为 /VC/my.xml
-
1
39
-
2
39
-
3
38
-
4
29
-
5
28
2.根据XML格式新建一个model,取名GameInfoModel和XML的元素一一对应。
using UnityEngine;
using System.Collections;
using System;
public class GameInfoModel
{
public int Id { set; get; }
public int Score { set; get; }
public string Time { set; get; }
}
using UnityEngine;
using System.Collections;
using System.Xml.Linq;
using System.Xml;
using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
///
/// By:略知CSharp
///
public class HelperXML : MonoBehaviour
{
string filePath = string.Empty;
void Awake()
{
//此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。
filePath = Application.dataPath + @"/VC/my.xml";
}
///
/// 1.遍历读取XML
///
///
public List VCLoadXMLManage()
{
XElement root = XElement.Load(filePath);
List list = new List();
foreach (var item in root.Element("Group").Elements("Item")) //遍历XElement
{
list.Add(new GameInfoModel
{
Id = Convert.ToInt32(item.Element("ID").Value),
Score = Convert.ToInt32(item.Element("Score").Value),
Time = item.Element("Time").Value
}
);
}
return list;
}
///
/// 2.删除第三级所有节点
///
public void VCRemoveXmlElement()
{
XElement root = XElement.Load(filePath);
XElement node = root.Descendants().Where(p => p.Name == "Group").Last();
node.Elements().Remove();
root.Save(filePath);
}
///
/// 3.添加第三级
///
///
public void VCAddXml(List list)
{
XElement root = XElement.Load(filePath);
XElement node = root.Descendants().Where(p => p.Name == "Group").Last();
for (int i = 0, count = list.Count; i < count; i++)
{
XElement child = new XElement("Item",
new XElement("ID", i + 1),
new XElement("Score", list[i].Score),
new XElement("Time", list[i].Time)
);
node.Add(child);
}
root.Save(filePath);
}
}
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;
using System;
using System.Linq;
using System.Text;
///
/// UI管理器
///
public class UICon : HelperXML
{
public GameObject UI_Info; //游戏结束图片//计分板
public Text scoreText; //得分版
public Text countText; //计分板
int scoreCount = 0;
///
/// 游戏结束显示相关UI
///
public void UIGameVoer()
{
//显示记分板
UI_Info.SetActive(true);
//遍历获取XML
List list = base.VCLoadXMLManage();
//当前分数
int nowScore = scoreCount;
//添加当前分数信息
var mod = new GameInfoModel {
Score = nowScore,
Time = DateTime.Now.ToString("MM月dd日")
};
list.Add(mod);
//倒序
list = list.OrderByDescending(p => p.Score).ToList();
//删除最后一个最少的
if(list.Count>5)
list.RemoveAt(list.Count - 1);
//显示最新排名版
StringBuilder sb = new StringBuilder();
int index = 1;
list.ForEach(p=> sb.Append(p.Score==mod.Score?
("" + index++ + " " + p.Score + "米 " + p.Time + " \n"):
( index++ + " " + p.Score + "米 " + p.Time + "\n"))
);
countText.text = sb.ToString();
//更新XML
base.VCRemoveXmlElement();
base.VCAddXml(list);
}
}
每次游戏结束都会更新排名板,利用XML持久化数据能实现大部分游戏的记录功能。
如场景信息、关卡信息、人物坐标、任务系统、NPC对话等等。。。。
项目小结:Linq 、lambda糖果是个好东西.foreach啥的以后少用了,官方歧视这些高能货。。
此游戏教程本来去年就要写完的,到后面发现做成视频教程都要好几个小时,何况全程高能红箭头标识的图文教程。要唠叨的东东太多了,还请大家见谅。
By:略知CSharp
2015年04月20日 00:00:23