Среда, 27 Ноября 2024, 22:03

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Как сохранить объект и потом его восстановить
timur2008Дата: Суббота, 07 Мая 2016, 22:07 | Сообщение # 1
частый гость
Сейчас нет на сайте
Здравствуйте. Скажите а как можно сохранить и потом восстановить при запуске программы объект который изображен на приложенном рисунке ?? Я пытался читать про сериализацию , но что-то понять все-равно не могу sad

UserButtonInput это пустой изначально Gameobject


Сообщение отредактировал timur2008 - Суббота, 07 Мая 2016, 22:12
LertmindДата: Воскресенье, 08 Мая 2016, 01:58 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Ты должен понять, что тебе надо сохранять. Например, если у тебя в UserButtonInput во время игры добавляются только однотипные InputField и ты хочешь сохранять их позицию и размер, то тебе надо только знать количество InputField и их позиции и размеры. В принципе, ты можешь всё это сохранять в текстовый файл и вручную вычленять данные.
Если говорить о сериализаторах. В Unity 5.3+ есть простой Json сериализатор http://docs.unity3d.com/Manual/JSONSerialization.html.
Для бинарной сериализации есть BinaryFormatter, например здесь им пользуются https://unity3d.com/ru....loading (код ближе к концу) и статья http://gamedevelopment.tutsplus.com/tutoria....s-20934. Для iOS надо дополнительно кое-что дописать http://answers.unity3d.com/questio....ng.html.

Вот простой пример для Json от Unity:
Код
// DataFile.cs
using UnityEngine;

public class DataFile : MonoBehaviour
{
    public Camera camera1;
    public int number;
    public string str;
}
// SerializationControl.cs
using UnityEngine;
using System.IO;

public class SerializationControl : MonoBehaviour
{
    string filePath;

    void Start()
    {
        print(Application.persistentDataPath);
        filePath = Path.Combine(Application.persistentDataPath, "datafile.json");
    }
    
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            DataFile c = FindObjectOfType<DataFile>();
            string str = JsonUtility.ToJson(c);
            File.WriteAllText(filePath, str);
            print("Serialize");

        }
        else if (Input.GetMouseButtonDown(1))
        {
            DataFile c = FindObjectOfType<DataFile>();
            string str = File.ReadAllText(filePath);
            JsonUtility.FromJsonOverwrite(str, c);
            print("Deserialize");
        }
    }
}

Кидаешь DataFile и SerializationControl на любые объекты, в компоненте DataFile меняешь переменные и нажимаешь ЛКМ. После можешь изменить данные, либо перезагрузить игру, и нажать ПКМ, тогда данные вернутся назад. При этом компонент DataFile должен существовать, FromJsonOverwrite используется для перезаписи сериализуемых полей, для MonoBehaviour только так и можно. Т.е. заранее создаешь объекты и компоненты и перезаписываешь поля компонентов.
Он также сохраняет ссылки на прикреплённые объекты, если есть на сцене или это префаб. С этим надо быть осторожнее, для редактора и билда разные формы записи, в редакторе легко меняется ссылка от каких-то изменений, а между билдами ссылки тоже меняются, так что в новой версии игры могут не работать сохранения.
Как работать с несколькими компонентами? Можно сохранять на разных строчках одного файла или в разных файлах.
В данном примере файл сохраняются в Application.persistentDataPath.
timur2008Дата: Воскресенье, 08 Мая 2016, 12:12 | Сообщение # 3
частый гость
Сейчас нет на сайте
Понял спасибо , выглядит понятно, но скажите я вот сохранил все нужные мне поля а как потом создать такой объект при загрузке(у него структура то сложная получается)? Мы ведь получается создаем объект и записываем в него эти данные, так ведь?

Добавлено (08 мая 2016, 12:12)
---------------------------------------------
Ааа да точно там же просто через метод Instantiate создается префаб и в него запихиваются все параметры smile Спасибо за помощь smile

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг