Страница 1 из 1

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

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

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

СообщениеДобавлено: 12 июл 2018, 20:15
1max1
Массивы можно сериализовать.

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


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

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

СообщениеДобавлено: 12 июл 2018, 20:17
sobolev.i
1max1 писал(а):Массивы можно сериализовать.

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


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

Спасибо большое. А не подкинешь примерчик таких скриптов, самых примитивных, чтобы лучше разобраться

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

СообщениеДобавлено: 12 июл 2018, 20:27
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]; // К примеру
}
 

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

СообщениеДобавлено: 12 июл 2018, 20:37
sobolev.i
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]; // К примеру
}
 

Извини, что задаю много вопросов, но, как я понимаю, это же не сохранение в файл? Просто не понял, куда файл сохраняется, и как это изменить.

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

СообщениеДобавлено: 12 июл 2018, 20:42
1max1

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

СообщениеДобавлено: 12 июл 2018, 22:47
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 я только пятый день...

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

СообщениеДобавлено: 12 июл 2018, 23:31
1max1
Щас бы в 2к18 координаты в строку пихать, это даже не костыли, это инвалидная коляска, я дал тебе вполне понятный кусок кода, если ты не можешь разобраться что к чему, думаю тебе стоит начать с чего попроще, либо посмотри видео на ютубе про сохранения и как его делать, уверен их там дофигище.
Скрытый текст:
Изображение

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

СообщениеДобавлено: 13 июл 2018, 11:33
Cr0c
sobolev.i писал(а):Когда запускаешь, и этот файл уже есть, то он в него записывает новые строчки, а не с нуля.

Ты же сам этот код пишешь. Каким методом записываешь? Что этот метод делает? Ты же из доков его взял.

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

СообщениеДобавлено: 13 июл 2018, 21:38
Fox_game
Синтаксис:
Используется csharp
        string appendText = save.positions + Environment.NewLine;
        File.AppendAllText(path, appendText);


Эти строчки тебя не смущают??

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

СообщениеДобавлено: 14 июл 2018, 06:48
Nubila
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 я только пятый день...

Прежде чем садится за создание игр, советую выучить базу хоть на каком нить ООП языке. Твой вопрос из разряда "не сложных", и ты спрашиваешь ещё больше вопросов, ответы на которые "нужно знать". Представь что будет, если ты столкнёшься с задачей из разряда "етить как сложно это что ВЕКТОРНАЯ АЛГЕБРА??!?!? А ЭТО ЧТО!?!? ГРАФЫ??? ДРАКУЛЫ ИЛИ КАВО???"

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

СообщениеДобавлено: 14 июл 2018, 08:10
1max1
ГРАФЫ??? ДРАКУЛЫ

чот орнул:DDD