О сохранении можно почитать Тут
Загрузка в нашем случае будет мало чем отличаться от сохранения, это обратный процесс и не более.
Возьмем болванку xml для наглядности.
<Level>
<player position_x="4" position_y="5" position_z = "10" > </player>
<monster position_x="4" position_y="5" position_z = "10" > </monster>
</Level>
Создаем некий скрипт Loader.cs
В самом начале прописываем:
using UnityEngine;
using System;
using System.Collections.Generic;
using System.Xml;
В качестве переменной пропишем
public Vector3 playerPosition = new Vector3(0,0,0);
дальше методы
Code
void Awake(){
LoadData();
}
void LoadData(){
string filepath = "data.xml";
XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.Load(filepath);
XmlNodeList levelList = xmlDoc.GetElementsByTagName ("Level");
foreach (XmlNode level in levelList)
{
XmlNode node = level.SelectSingleNode("player");
XmlAttributeCollection attr = node.Attributes;
string s1 = attr[0].Value;
float x_coord = System.Convert.ToSingle (s1);
s1 = attr[1].Value;
float y_coord = System.Convert.ToSingle (s1);
s1 = attr[2].Value;
float z_coord = System.Convert.ToSingle (s1);
playerPosition = new Vector3(x_coord,y_coord,z_coord);
}
}
Итак,
Code
XmlNodeList levelList = xmlDoc.GetElementsByTagName ("Level");
Создаем список с элементами под тегом уровень. Это нужно для того чтобы при необходимости загружать все уровни разом. В нашем примере правда значение позиции игрока будет переписано много раз если уровней будет несколько. Это просто пример чтобы показать как все работает.
Code
foreach (XmlNode level in levelList)
- Прогоняем по списку.
Code
XmlNode node = level.SelectSingleNode("player");
- Находим элемент "player".
Code
XmlAttributeCollection attr = node.Attributes;
- коллекция атрибутов найденного объекта player.
Code
string s1 = attr[0].Value;
float x_coord = System.Convert.ToSingle (s1);
s1 = attr[1].Value;
float y_coord = System.Convert.ToSingle (s1);
s1 = attr[2].Value;
float z_coord = System.Convert.ToSingle (s1);
Загружаем значения с атрибутов и сразу добавляем их в наши временные переменные. Convert.ToSingle перегоняет значения во float. Это нужно так как изначально данные идут как текст.
Code
playerPosition = new Vector3(x_coord,y_coord,z_coord);
- назначаем позиции игрока новые значения из временных переменных.