Сохранение многих данных в файл.

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Сохранение многих данных в файл.

Сообщение sobolev.i 12 июл 2018, 20:10

Привет всем. Есть много объектов на сцене, и нужно по нажатию на кнопку, сохранить положение всех этих моделей, чтобы потом, при загрузке их создать в нужных местах.
Прошу помощи, перерыл много гугла, и научился только для одной модели...
А мне бы в строчку три координаты, и так каждая строчка на один объект.
sobolev.i
UNец
 
Сообщения: 9
Зарегистрирован: 08 июл 2018, 23:35

Re: Сохранение многих данных в файл.

Сообщение 1max1 12 июл 2018, 20:15

Массивы можно сериализовать.

Синтаксис:
Используется csharp
[System.Serializable]
class Save
{
    Vector3[] positions;
    // или так
    List<Vector3> _positions;
}


После сериализации юньковским джесоном можно запихнуть эту строку либо в файлик либо в playerprefs
Вот тут про джсон https://docs.unity3d.com/Manual/JSONSerialization.html
Аватара пользователя
1max1
Адепт
 
Сообщения: 1564
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение многих данных в файл.

Сообщение sobolev.i 12 июл 2018, 20:17

1max1 писал(а):Массивы можно сериализовать.

Синтаксис:
Используется csharp
[System.Serializable]
class Save
{
    Vector3[] positions;
    // или так
    List<Vector3> _positions;
}


После сериализации юньковским джесоном можно запихнуть эту строку либо в файлик либо в playerprefs
Вот тут про джсон https://docs.unity3d.com/Manual/JSONSerialization.html

Спасибо большое. А не подкинешь примерчик таких скриптов, самых примитивных, чтобы лучше разобраться
sobolev.i
UNец
 
Сообщения: 9
Зарегистрирован: 08 июл 2018, 23:35

Re: Сохранение многих данных в файл.

Сообщение 1max1 12 июл 2018, 20:27

Так в мануале ж всё есть, почитай.
Тебе нужно создать класс с массивом, где ты будешь хранить координаты.
Потом этот класс можно сериализовать и сохранить.
Синтаксис:
Используется csharp
[Serializable]
public class SaveData
{
    public Vector3[] positions;
}

void Start()
{
    var save = new SaveData();

    save.positions = new Vector3[3];
    save.positions[0] = new Vector3(1,0,0);
    save.positions[1] = new Vector3(0,1,0);
    save.positions[2] = new Vector3(0,0,1);

    string json = JsonUtility.ToJson(save);
    PlayerPrefs.SetString("SavePositions", json); // Сохраняем

    var load = JsonUtility.FromJson<SaveData>(PlayerPrefs.GetString("SavePositions")); // Загружаем

    go1.transform.position = load.positions[0]; // К примеру
}
 
Аватара пользователя
1max1
Адепт
 
Сообщения: 1564
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение многих данных в файл.

Сообщение sobolev.i 12 июл 2018, 20:37

1max1 писал(а):Так в мануале ж всё есть, почитай.
Тебе нужно создать класс с массивом, где ты будешь хранить координаты.
Потом этот класс можно сериализовать и сохранить.
Синтаксис:
Используется csharp
[Serializable]
public class SaveData
{
    public Vector3[] positions;
}

void Start()
{
    var save = new SaveData();

    save.positions = new Vector3[3];
    save.positions[0] = new Vector3(1,0,0);
    save.positions[1] = new Vector3(0,1,0);
    save.positions[2] = new Vector3(0,0,1);

    string json = JsonUtility.ToJson(save);
    PlayerPrefs.SetString("SavePositions", json); // Сохраняем

    var load = JsonUtility.FromJson<SaveData>(PlayerPrefs.GetString("SavePositions")); // Загружаем

    go1.transform.position = load.positions[0]; // К примеру
}
 

Извини, что задаю много вопросов, но, как я понимаю, это же не сохранение в файл? Просто не понял, куда файл сохраняется, и как это изменить.
sobolev.i
UNец
 
Сообщения: 9
Зарегистрирован: 08 июл 2018, 23:35


Re: Сохранение многих данных в файл.

Сообщение sobolev.i 12 июл 2018, 22:47


Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class SaveLoad : MonoBehaviour {

    public static GameObject choosedPart;


   [Serializable]
    public class SaveData
    {
        public string positions;
    }

    private void Start()

    {

        Save();  
    }

    public void Save ()

    {
        GameObject game = GameObject.Find("Detail2");
        var save = new SaveData();
        string posX = game.transform.GetComponent<Parts>().x.ToString();
        string posY = game.transform.GetComponent<Parts>().y.ToString();
        string posZ = game.transform.GetComponent<Parts>().z.ToString();
        string number = game.transform.GetComponent<Parts>().number.ToString();
        string rot = game.transform.GetComponent<Parts>().rotation.ToString();
        save.positions = posX + " " + posY + " " + posZ + " " + number + " " + rot;

        string path = "Save/Save.txt";
        if (!File.Exists(path))
        {
            string createText ="";
            File.WriteAllText(path, createText);
        }

        string appendText = save.positions + Environment.NewLine;
        File.AppendAllText(path, appendText);


        // Read
        string readText = File.ReadAllText(path);

    }
}
 


Вот я сделал так. Несколько проблем... Когда запускаешь, и этот файл уже есть, то он в него записывает новые строчки, а не с нуля.
И объект только 1. Ну и чтение пока не отработал. Честно говоря, немного не понял твою мысль с массивом, можешь поподробнее объяснить, или пример в мой код добавить....
Прости за тупение моё. В c# и Unity я только пятый день...
sobolev.i
UNец
 
Сообщения: 9
Зарегистрирован: 08 июл 2018, 23:35

Re: Сохранение многих данных в файл.

Сообщение 1max1 12 июл 2018, 23:31

Щас бы в 2к18 координаты в строку пихать, это даже не костыли, это инвалидная коляска, я дал тебе вполне понятный кусок кода, если ты не можешь разобраться что к чему, думаю тебе стоит начать с чего попроще, либо посмотри видео на ютубе про сохранения и как его делать, уверен их там дофигище.
Скрытый текст:
Изображение
Аватара пользователя
1max1
Адепт
 
Сообщения: 1564
Зарегистрирован: 28 июн 2017, 10:51

Re: Сохранение многих данных в файл.

Сообщение Cr0c 13 июл 2018, 11:33

sobolev.i писал(а):Когда запускаешь, и этот файл уже есть, то он в него записывает новые строчки, а не с нуля.

Ты же сам этот код пишешь. Каким методом записываешь? Что этот метод делает? Ты же из доков его взял.
Аватара пользователя
Cr0c
Адепт
 
Сообщения: 2808
Зарегистрирован: 19 июн 2015, 13:50

Re: Сохранение многих данных в файл.

Сообщение Fox_game 13 июл 2018, 21:38

Синтаксис:
Используется csharp
        string appendText = save.positions + Environment.NewLine;
        File.AppendAllText(path, appendText);


Эти строчки тебя не смущают??
Fox_game
UNIт
 
Сообщения: 117
Зарегистрирован: 08 июл 2017, 19:33

Re: Сохранение многих данных в файл.

Сообщение Nubila 14 июл 2018, 06:48

sobolev.i писал(а):

Синтаксис:
Используется csharp
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;

public class SaveLoad : MonoBehaviour {

    public static GameObject choosedPart;


   [Serializable]
    public class SaveData
    {
        public string positions;
    }

    private void Start()

    {

        Save();  
    }

    public void Save ()

    {
        GameObject game = GameObject.Find("Detail2");
        var save = new SaveData();
        string posX = game.transform.GetComponent<Parts>().x.ToString();
        string posY = game.transform.GetComponent<Parts>().y.ToString();
        string posZ = game.transform.GetComponent<Parts>().z.ToString();
        string number = game.transform.GetComponent<Parts>().number.ToString();
        string rot = game.transform.GetComponent<Parts>().rotation.ToString();
        save.positions = posX + " " + posY + " " + posZ + " " + number + " " + rot;

        string path = "Save/Save.txt";
        if (!File.Exists(path))
        {
            string createText ="";
            File.WriteAllText(path, createText);
        }

        string appendText = save.positions + Environment.NewLine;
        File.AppendAllText(path, appendText);


        // Read
        string readText = File.ReadAllText(path);

    }
}
 


Вот я сделал так. Несколько проблем... Когда запускаешь, и этот файл уже есть, то он в него записывает новые строчки, а не с нуля.
И объект только 1. Ну и чтение пока не отработал. Честно говоря, немного не понял твою мысль с массивом, можешь поподробнее объяснить, или пример в мой код добавить....
Прости за тупение моё. В c# и Unity я только пятый день...

Прежде чем садится за создание игр, советую выучить базу хоть на каком нить ООП языке. Твой вопрос из разряда "не сложных", и ты спрашиваешь ещё больше вопросов, ответы на которые "нужно знать". Представь что будет, если ты столкнёшься с задачей из разряда "етить как сложно это что ВЕКТОРНАЯ АЛГЕБРА??!?!? А ЭТО ЧТО!?!? ГРАФЫ??? ДРАКУЛЫ ИЛИ КАВО???"
Последний раз редактировалось Nubila 14 июл 2018, 08:35, всего редактировалось 1 раз.
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 159
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Сохранение многих данных в файл.

Сообщение 1max1 14 июл 2018, 08:10

ГРАФЫ??? ДРАКУЛЫ

чот орнул:DDD
Аватара пользователя
1max1
Адепт
 
Сообщения: 1564
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 25