Как отобразить содержимое XML файла Unity 5
В сегодняшнем уроке мы разберем как отобразить содержимое файла XML Unity 5 и заполнить им класс персонажа. Для начала создадим XML файл, который мы должны будем распарсивать. Создадим файл PlayerData.XML в папке Resources, в котором напишем:
1 2 3 4 5 6 |
<?xml version="1.0"?> <Player> <Hp> 100 </Hp> <Speed> 2 </Speed> <Strength> 0.6 </Strength> </Player> |
Данный файл мы и будем распарсивать. Создадим класс Player, в который мы и будем преображать наши даные.
1 2 3 4 5 6 7 8 9 10 11 |
//Для того, чтоб данные отображались //в инспекторе [Serializable] public class Player { //3 переменные из файла, в которые //Мы будем выгружать public int Hp; public float Speed; public float Strength; } |
Далее создадим скрипт XmlToObjects, который считает наш файл и по алгоритму выгрузит его в приемлимый для нас класс.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//Не забываем подключить пространство имен using System.Xml; //System - для работы Convert using System; //Делаем класс статичным, чтоб он был доступен отовсюду. public static class XmlToObjects { public static Player ReadXMLToPlayer(string Path) { //Создаем новый объект нашего XML документа var document = new XmlDocument(); //Загружаем нужный нам файл document.Load(Path); //Получаем главный элемент документа //В котором лежат все узлы XmlElement elem = document.DocumentElement; //Создаем новый объект данных игрока Player PlayerData = new Player(); //Выгружаем данные, преобразовывая в нужный формат //ChildNodes[i] - это узлы которые хранят в себе данные //Но могут хранить и другие узлы, так как XML //имеет древовидную структуру, что позволяет //Уходить далеко вглубь PlayerData.Hp = Convert.ToInt32(elem.ChildNodes[0].InnerText); PlayerData.Speed= Convert.ToSingle(elem.ChildNodes[1].InnerText); PlayerData.Strength = Convert.ToSingle(elem.ChildNodes[2].InnerText); return PlayerData; } } |
А теперь создадим класс, который повесим на игрока, и который будет запускать нашу выгрузку
1 2 3 4 5 6 7 8 9 10 |
public class PlayerController : MonoBehaviour { public Player PlayerData; private void Start() { //Выгрузим данные их XML PlayerData = XmlToObjects.ReadXMLToPlayer(Application.dataPath + "/Resources/PlayerData.xml"); } } |
По итогу реализации скрипта мы должны будем отобразить содержимое XML файла в Unity. Теперь при запуске игры, наш скрипт выгружает данные и заносит их в класс Player. Выглядит это так: