Сохранение игры — важный аспект разработки игр, позволяющий игрокам продолжить с того места, на котором они остановились и сохранить их прогресс и настройки. В Unity существует несколько способов сохранения игровых данных, начиная от простых настроек игрока и заканчивая более сложными структурами данных.
Один из самых простых способов сохранить игровые данные в Unity — использовать настройки игрока. Настройки игрока позволяют сохранять простые пары «ключ-значение», такие как имя игрока, рекорд и настройки игры. Чтобы сохранить настройки игрока, вы можете использовать класс PlayerPrefs, который предоставляет методы для установки, получения и удаления пар ключ-значение.


Пример сохранения счета игрока в Unity
Вот пример того, как использовать настройки игрока для сохранения рекорда очков:
using UnityEngine;
public class Example : MonoBehaviour
{
public int highScore = 0;
private void Start()
{
highScore = PlayerPrefs.GetInt("HighScore", 0);
}
public void SaveHighScore(int score)
{
if (score > highScore)
{
highScore = score;
PlayerPrefs.SetInt("HighScore", highScore);
PlayerPrefs.Save();
}
}
}
В этом примере метод Start использует метод PlayerPrefs.GetInt для извлечения рекорда из настроек игрока. Метод SaveHighScore принимает счет в качестве аргумента и проверяет, выше ли она текущего счета. Если да, то рекорд обновляется и сохраняется в настройках игрока с помощью методов PlayerPrefs.SetInt и PlayerPrefs.Save.
Хотя настройки игрока полезны для простых данных, они могут стать громоздкими по мере увеличения объема данных, которые необходимо сохранить. В этих случаях вам может понадобиться использовать более сложную структуру данных, такую как двоичный или текстовый файл для хранения ваших данных.
Один из способов сохранить более сложные структуры данных в Unity — использовать класс BinaryFormatter для сериализации данных в двоичный файл. Класс BinaryFormatter можно использовать для сериализации сложных структур данных, включая массивы, списки и классы, в двоичный файл.
Сохранения прогресса игрока
Вот пример того, как использовать класс BinaryFormatter для сохранения и загрузки прогресса игрока:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using UnityEngine;
[Serializable]
public class Progress
{
public int level = 1;
public int score = 0;
}
public class Example : MonoBehaviour
{
private Progress progress;
private void Start()
{
LoadProgress();
}
public void SaveProgress()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/progress.dat");
bf.Serialize(file, progress);
file.Close();
}
public void LoadProgress()
{
if (File.Exists(Application.persistentDataPath + "/progress.dat"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/progress.dat", FileMode.Open);
progress = (Progress)bf.Deserialize(file);
File.Close();
}
else
{
progress = new Progress();
}
}
}
В этом примере класс Progress помечен атрибутом Serializable, что позволяет сериализовать его классом BinaryFormatter. Метод «Start» использует метод «LoadProgress» для загрузки прогресса игрока из двоичного файла, а метод «SaveProgress» использует класс «BinaryFormatter» для сериализации объекта «Progress» в двоичный файл. Двоичный файл хранится в папке Application.persistentDataPath
, которая является местом для конкретной платформы, где вы можете хранить данные, которые должны сохраняться между сеансами.
Сохранение игр в Unity может варьироваться от простых настроек игрока до более сложных структур данных, в зависимости от потребностей вашей игры. С помощью классов PlayerPrefs
и BinaryFormatter
вы можете реализовать сохранение и загрузку игровых данных, которые позволят вашим игрокам продолжить с того места, где они остановились, и сохранить свой прогресс и настройки.