아카이브 및 읽기

24910 단어 플레이
게임에서 종종 저장과 읽기 파일을 필요로 하고 게임의 저장과 읽기를 해야 한다. 게임의 저장과 읽기 파일은 사실상 대상의 서열화와 반서열화이다.게임에 저장해야 할 클래스가 Save라면 세 가지 방법으로 저장과 읽기 파일을 만들 수 있다.
//   
[System.Serializable]
public class Save
{
  	public List<int> livingTargetPositions = new List<int>();
    public List<int> livingMonsterTypes = new List<int>();

    public int shootNum = 0;
    public int score = 0;
}
//     
//  
BinaryFormatter bf = new BinaryFormatter();
//       
FileStream fileStream = File.Create(Application.dataPath + "/StreamingFile" + "/byBin.txt");
//                   Save  ,  :               
bf.Serialize(fileStream, save);
//   
fileStream.Close();
//      ,       
if (File.Exists(Application.dataPath + "/StreamingFile" + "/byBin.txt"))
{
    print("    ");
}


//  
BinaryFormatter bf = new BinaryFormatter();
//       
FileStream fileStream = File.Open(Application.dataPath + "/StreamingFile" + "/byBin.txt", FileMode.Open);
//              ,         Save  
Save save= (Data)bf.Deserialize(fileStream);
//     
fileStream.Close();
using LitJson;

//Json  
//  
string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";
//  JsonMapper save     Json      
string saveJsonStr = JsonMapper.ToJson(save);
//            
//    StreamWriter,          
StreamWriter sw = new StreamWriter(filePath);
sw.Write(saveJsonStr);
//  StreamWriter
sw.Close();
print("    ");


//  
//    StreamReader,     
string filePath = Application.dataPath + "/StreamingFile" + "/byJson.json";
StreamReader sr = new StreamReader(filePath);
//         jsonStr
string jsonStr = sr.ReadToEnd();
//  
sr.Close();
//    jsonStr   Save  
Save save = JsonMapper.ToObject<Save>(jsonStr);
using System.Xml;


//Xml  
//  
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.txt";
//  XML  
XmlDocument xmlDoc = new XmlDocument();
//     ,      
XmlElement root = xmlDoc.CreateElement("save");
//        
root.SetAttribute("name", "saveFile1");
//  XmlElement
XmlElement target;
XmlElement targetPosition;
XmlElement monsterType;
//  save      ,      XML  
for(int i = 0; i < save.livingTargetPositions.Count; i++)
{
    target = xmlDoc.CreateElement("target");
    targetPosition = xmlDoc.CreateElement("targetPosition");
    //  InnerText 
    targetPosition.InnerText = save.livingTargetPositions[i].ToString();
    monsterType = xmlDoc.CreateElement("monsterType");
    monsterType.InnerText = save.livingMonsterTypes[i].ToString();
    //           root -- target -- (targetPosition, monsterType)
    target.AppendChild(targetPosition);
    target.AppendChild(monsterType);
    root.AppendChild(target);
}
//                  xmlDoc -- root --(target-- (targetPosition, monsterType), shootNum, score)
XmlElement shootNum = xmlDoc.CreateElement("shootNum");
shootNum.InnerText = save.shootNum.ToString();
root.AppendChild(shootNum);
XmlElement score = xmlDoc.CreateElement("score");
score.InnerText = save.score.ToString();
root.AppendChild(score);
xmlDoc.AppendChild(root);
xmlDoc.Save(filePath);
//  
string filePath = Application.dataPath + "/StreamingFile" + "/byXML.txt";
Save save = new Save();
//  XML  
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath);
//           ,   XmlNodeList  
XmlNodeList targets = xmlDoc.GetElementsByTagName("target");
//     target  ,           InnerText
if(targets.Count != 0)
{
    foreach(XmlNode target in targets)
    {
        XmlNode targetPosition = target.ChildNodes[0];
        int targetPositionIndex = int.Parse(targetPosition.InnerText);
        //        save 
        save.livingTargetPositions.Add(targetPositionIndex);

        XmlNode monsterType = target.ChildNodes[1];
        int monsterTypeIndex = int.Parse(monsterType.InnerText);
        save.livingMonsterTypes.Add(monsterTypeIndex);
    }
}
//           
XmlNodeList shootNum = xmlDoc.GetElementsByTagName("shootNum");
int shootNumCount = int.Parse(shootNum[0].InnerText);
save.shootNum = shootNumCount;
XmlNodeList score = xmlDoc.GetElementsByTagName("score");
int scoreCount = int.Parse(score[0].InnerText);
save.score = scoreCount;

좋은 웹페이지 즐겨찾기