Вы не можете сохранить игровые объекты. Единственное, что вы сохраняете, это детали игрового объекта. Например, если у вас есть 3D-куб с некоторыми эффектами частиц, сначала вы сохраняете необходимые значения куба, такие как «Положение», «Вращение», «Масштаб», «Цвет» и другие необходимые элементы (значения эмиттера частиц, которые необходимо изменить). Даже при сериализации вы не сможете сохранить Vector3, поскольку это структура, и вам придется написать собственный сериализатор для векторов. Короче говоря, что вы сохраняете в значениях, необходимых для работы ваших игровых объектов, и других поведенческих характеристиках, которые требовали пользовательских вводов от пользователя / другой системы. Думайте об этом как о способе перестроить ваши объекты в состояние, в котором вы остановились, путем сохранения и загрузки состояний переменных, которые влияют на ваши объекты.
Сохранения единства бывают двух типов
1) Настройки игрока : Используя настройки игрока, вы сможете сохранять только одно значение за раз в поле. Обычно один из трех:
Обычно вы сохраняете токены и другие небольшие значения, для которых не требуются большие файлы
2) Сериализованные игровые данные: здесь вы сохраняете большие наборы данных и классы, такие как PlayerInfo, пользовательские изменения сцены в сериализованных файлах.
Я верю, что вы ищете это второе. Поэтому вместо того, чтобы искать все примеры и запутываться, вы можете начать с сохранения / загрузки значений куба (возможно, позиции? Или всего, что вы изменяете во время выполнения) в файле. И постепенно вы можете перейти на сериализатор.
Вы можете проверить по этим ссылкам, чтобы помочь вам понять.
Ссылка
Сохранение / загрузка данных с использованием простого BinaryFormatter
XML-сериализатор
Этот фрагмент сохранения взят из простой двоичной ссылки формататора, которая сохраняет целочисленные списки некоторых типов и пользовательские оценки.
[System.Serializable]
public class Save
{
public List<int> livingTargetPositions = new List<int>();
public List<int> livingTargetsTypes = new List<int>();
public int hits = 0;
public int shots = 0;
}
private Save CreateSaveGameObject()
{
Save save = new Save();
int i = 0;
foreach (GameObject targetGameObject in targets)
{
Target target = targetGameObject.GetComponent<Target>();
if (target.activeRobot != null)
{
save.livingTargetPositions.Add(target.position);
save.livingTargetsTypes.Add((int)target.activeRobot.GetComponent<Robot>().type);
i++;
}
}
save.hits = hits;
save.shots = shots;
return save;
}
public void SaveGame()
{
// 1
Save save = CreateSaveGameObject();
// 2
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/gamesave.save");
bf.Serialize(file, save);
file.Close();
// 3
hits = 0;
shots = 0;
shotsText.text = "Shots: " + shots;
hitsText.text = "Hits: " + hits;
ClearRobots();
ClearBullets();
Debug.Log("Game Saved");
}