Сохранение игровых данных в фаил
В любой игре, ну или почти, не обойтись без сохранения и загрузки. Система сохранения уже встроена в Unity и она достаточно удобная. Но, одно дело, когда сохранения где-то там в реестре Windows например. А парой удобнее, когда всё под рукой, так сказать. Да и не хорошо забивать реестр различными данными, если есть возможность сохранить всё отдельно. Мы рассмотрим простой способ сохранения игровых данных, с использованием языка разметки XML. Ну и само-собой добавим возможность загружать настройки из файла. Скрипт, который мы напишем в данном уроке, Вы сможете без проблем использовать в своей игре.
Преступим. Создаем новый C# скрипт, например LoadSaveXML.
Подключаем System.Xml и System.IO:
Далее, нам понадобятся переменные. Имя файла, который будет создавать скрипт. Допустим, еще для звука и музыки, а так-же массив. Впрочем массив не обязательно добавлять, но тем не менее, может возникнуть необходимость и Вам понадобится как раз именно это.
Первым сделаем сохранение, в данном примере используется публичная функция, чтобы можно было получить к ней доступ из других скриптов. Кроме того это функция OnApplicationQuit, которая вызывается каждый раз, перед выходом из приложения. Если вам это не нужно, то просто переименуйте.
Путь файла с сохранениями Application.dataPath, подробнее о том, где можно найти файл смотрите здесь.
Теперь добавим функцию загрузки данных из файла:
Здесь с начала делается проверка, существует ли файл, если да, то читается массив, затем остальное. Как видите тут всё достаточно просто и наглядно, можно добавлять или удалять блоки сохранения/загрузки. Важно понимать, что значения сохраняются как string, это значит их необходимо обратно конвертировать в нужный тип. Например, int.Parse(string) и т.п.
Преступим. Создаем новый C# скрипт, например LoadSaveXML.
Подключаем System.Xml и System.IO:
using UnityEngine;
using System.Collections;
using System.IO;
using System.Xml;
Далее, нам понадобятся переменные. Имя файла, который будет создавать скрипт. Допустим, еще для звука и музыки, а так-же массив. Впрочем массив не обязательно добавлять, но тем не менее, может возникнуть необходимость и Вам понадобится как раз именно это.
public string saveFileName = "PlayerPrefs";
public float soundValue;
public float musicValue;
public int[] array;
Первым сделаем сохранение, в данном примере используется публичная функция, чтобы можно было получить к ней доступ из других скриптов. Кроме того это функция OnApplicationQuit, которая вызывается каждый раз, перед выходом из приложения. Если вам это не нужно, то просто переименуйте.
public void OnApplicationQuit()
{
XmlDocument xmlDoc = new XmlDocument();
XmlNode rootNode = xmlDoc.CreateElement("SaveData");
xmlDoc.AppendChild(rootNode);
XmlNode userNode;
userNode = xmlDoc.CreateElement("MusicValue");
userNode.InnerText = musicValue.ToString();
rootNode.AppendChild(userNode);
userNode = xmlDoc.CreateElement("SoundValue");
userNode.InnerText = soundValue.ToString();
rootNode.AppendChild(userNode);
for(int i = 0; i < array.Length; i++)
{
userNode = xmlDoc.CreateElement("Array_" + i);
userNode.InnerText = array[i].ToString();
rootNode.AppendChild(userNode);
}
xmlDoc.Save(Application.dataPath + "/" + saveFileName + ".xml");
}
Путь файла с сохранениями Application.dataPath, подробнее о том, где можно найти файл смотрите здесь.
Теперь добавим функцию загрузки данных из файла:
public void LoadSettings()
{
if(File.Exists(Application.dataPath + "/" + saveFileName + ".xml"))
{
XmlTextReader keyReader = new XmlTextReader(Application.dataPath + "/" + saveFileName + ".xml");
for(int i = 0; i < array.Length; i++)
{
keyReader.ReadToFollowing("Array_" + i);
array[i] = int.Parse(keyReader.ReadString());
}
keyReader.Close();
XmlTextReader reader = new XmlTextReader(Application.dataPath + "/" + saveFileName + ".xml");
while (reader.Read())
{
if (reader.IsStartElement("MusicValue"))
{
musicValue = float.Parse(keyReader.ReadString());
}
if (reader.IsStartElement("SoundValue"))
{
soundValue = float.Parse(keyReader.ReadString());
}
}
reader.Close();
}
}
Здесь с начала делается проверка, существует ли файл, если да, то читается массив, затем остальное. Как видите тут всё достаточно просто и наглядно, можно добавлять или удалять блоки сохранения/загрузки. Важно понимать, что значения сохраняются как string, это значит их необходимо обратно конвертировать в нужный тип. Например, int.Parse(string) и т.п.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.