С Новым годом! Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,201

Способ сохранения множества объектов и параметров

15.12.2025, 16:53. Показов 528. Ответов 9

Студворк — интернет-сервис помощи студентам
Вот есть допустим много объектов, состояние которых нужно сохранить. двери (открыты или закрыты), объекты которые были разрушены и их при загрузке уже не должно быть и всякое подобное.

Какой способ и формат сохранения вы бы посоветовали. и если можно вкратце основную схему и хотя бы фрагменты кода подскажите кому не лень. думаю тема интересная.

Добавлено через 33 секунды
заранее благодарю откликнувшимся !
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.12.2025, 16:53
Ответы с готовыми решениями:

Использование одного скрипта для множества объектов с изменением параметров только данного объекта
У меня есть префаб, состоящий из родительского и дочернего объекта (платформа и триггер для нее)....

Как создавать точки сохранения в unity? Чтобы если персонаж упал, то он возвращался на определенную точку сохранения
Я подключил библиотеку : using UnityEngine.SceneManagement; Далее подключил условие, если...

Сохранение множества объектов
Приветствую всех! Делаю небольшую программу на Unity под ОС Android. Если в кратце, то есть...

9
Модератор
Эксперт Java
 Аватар для alecss131
2848 / 1356 / 404
Регистрация: 11.08.2017
Сообщений: 4,329
Записей в блоге: 2
15.12.2025, 21:09
Смотря на сколько много, десятки вполне себе можно хранить в json/xml или любой другой сериализацией поддерживающей массивы.
Если сотни, то по сути можно тоже, но лучше что-то по типу sqlite

А так похоже на реализацию сохранений в игре, не помню чтобы там использовались бд (sqlite), там скорее будет своя бинарная сериализация (ведь число объектов для хранения в таком случае известно).
1
1142 / 307 / 159
Регистрация: 30.07.2022
Сообщений: 1,779
Записей в блоге: 4
15.12.2025, 22:52
Gammister,
В вашем случае я бы заставил каждый объект самостоятельно сообщать файлу сохранений своё состояние, в момент изменения состояния. Делегат Action вам в помощь.
бинарный файл сохранений для этого подойдет лучше всего, так как ему все равно какой тип сохранять.

соответственно для каждой двери должна быть строка сохранения её состояния по уникальному ID.

это не готовое решение. я далее просто набрасываю, что в голову приходит
например;
C#
1
2
3
4
5
6
7
// Интерфейс для объектов, которые могут сохраняться
public interface ISaveable
{
    string GetID();
    void SaveState();
    void LoadState(Dictionary<string, object> state);
}
реализуете через синглтон какой нибудь сласс SaveManager
например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// внутри класса 
public static SaveManager Instance;
private void Awake()
{
    if (Instance == null)
    {
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
}
// это гарантирует единственный экземпляр менеджера
// и глобальную точку доступа SaveManager.Instance
 
// далее паттерн наблюдатель
// Каждый объект получает уведомление о необходимости сохраниться (нажали сохранить в меню или сменили сцену)
 
// дальше паттерн Registry (Реестр)
// Централизованная регистрация всех сохраняемых объектов
// Поиск объектов по уникальному ID
 
// ну и реализация SaveState и LoadState
1
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,201
16.12.2025, 19:11  [ТС]
благодарю!
Цитата Сообщение от ieretsumi Посмотреть сообщение
соответственно для каждой двери должна быть строка сохранения её состояния по уникальному ID.
ieretsumi, не подскажешь, что именно имеется в виду? построчная запись в файл объектов из словаря, что бы потом по этим ключам считывать?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6151 / 2843 / 1041
Регистрация: 01.06.2021
Сообщений: 10,372
16.12.2025, 21:52
Цитата Сообщение от Gammister Посмотреть сообщение
состояние которых нужно сохранить
Сохранить на время игры или сохранить в том числе после закрытия игры? Это разные вещи и, соответственно, разные подходы.
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,201
17.12.2025, 18:18  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Сохранить на время игры или сохранить в том числе после закрытия игры? Это разные вещи и, соответственно, разные подходы.
во время игры. например после смерти, что бы при повторном спауне все сохранилось.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6151 / 2843 / 1041
Регистрация: 01.06.2021
Сообщений: 10,372
17.12.2025, 18:24
Цитата Сообщение от Gammister Посмотреть сообщение
во время игры
Тогда запись на диск (во всякие json/xml и базы данных) это излишне. Данные могут остаться просто в памяти, тем более файловые операции с диском ресурсозатратны, лучше в памяти.

Самый простой способ это создать статический класс. Но можно и с ScriptableObject https://docs.unity3d.com/6000.... bject.html
1
1142 / 307 / 159
Регистрация: 30.07.2022
Сообщений: 1,779
Записей в блоге: 4
17.12.2025, 18:29
Gammister,
Цитата Сообщение от Gammister Посмотреть сообщение
например после смерти, что бы при повторном спауне все сохранилось.
ну если проект не сложный, то воскрешайте персонажа без перезагрузки сцены. Просто восстанавливайте НР и перемещайте на точку спавна.
1
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,201
17.12.2025, 19:32  [ТС]
Цитата Сообщение от ieretsumi Посмотреть сообщение
ну если проект не сложный, то воскрешайте персонажа без перезагрузки сцены. Просто восстанавливайте НР и перемещайте на точку спавна.
согласен. но тут же еще другие объекты будут сохраняться. а можете подсказать пример кода, как построчно записывать объекты под одним интерфейсом? как метод SaveState() будет реализован с json или с бинарником? и как считываться. хотя бы позиция например. если не трудно.
0
1142 / 307 / 159
Регистрация: 30.07.2022
Сообщений: 1,779
Записей в блоге: 4
17.12.2025, 20:29
Лучший ответ Сообщение было отмечено Gammister как решение

Решение

Gammister,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// Сохранение состояния по uniqueID
    public void SaveState(bool state, string uniqueID) //Сюда передаёте состояние двери: открыта/закрыта (вместо bool можно <T>, бинарному файлу в общем-то пофиг на типизацию сохраняемого параметра). и её ID хранится в скрипте на двери
    {
        BinaryFormatter formatter = new BinaryFormatter();//это класс, который используется для сериализации и десериализации объектов в бинарный формат.
        string path = Application.persistentDataPath + "/" + uniqueID + ".dat";
        FileStream stream = new FileStream(path, FileMode.Create);
 
        formatter.Serialize(stream, state);
        stream.Close();
        Debug.Log("Состояние сохранено: " + path);
    }
 
поместите этот метод в синглтон для глобальной точки доступа.

дверь примерно такая
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    [SerializeField] private bool isActive = false; // Состояние двери
    [SerializeField] private string uniqueID = "unique_object_id"; // Уникальный ID для объекта ДЛЯ КАЖДОГО ВВОДИТЬ СВОЙ
 
    public void ToggleState()
    {
        isActive = !isActive;
        Debug.Log("Состояние объекта: " + isActive);
 
        Save(); // сохраняем после изменения состояния
    }
 
    private void Start()
    {
        Load() 
    }
 
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            ToggleState();
        }
    }
 
    // Сохранение состояния
    public void Save() если нужно сохранять массово, то подключите этот метод к событию
    {
        SaveSystem.Instance.SaveState(isActive, uniqueID); // сюда пихаем Уникальный ID
    }
 
    // Загрузка состояния
    public void Load() 
    {
        isActive = SaveSystem.Instance.LoadState(uniqueID);
    }

за бортом осталось много нюансов: Стоит ли загружать состояние, если загрузили новую, а не сохранённую сцену, например. Тестируйте!!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.12.2025, 20:29
Помогаю со студенческими работами здесь

Есть ли способ объединить несколько объектов в один объект?Не используя какие-то сторонние графические редакторы
Есть у меня например пустой GameObject, у него 12 дочерних объектов, все это жрёт фпс нехило,...

Сохранение ВСЕХ параметров префаба сразу
Здравствуйте! Наболевший вопрос. Бывает так, что долго меняю различные параметры префаба на...

Подскажите способ реализовать механику следования курсором заданной траектории
Я хочу реализовать механику в 2D игре, в которой игроку нужно провести курсором с зажатой ЛКМ...

Лучший способ делать коллайдеры Unity
Сделал модель дома(с внутренностями), теперь нужны коллайдеры. Додумался до пару методов но не знаю...

Самый простой способ ротации времени в формате 24ч
нашел вот это, не сильно понятно что вывести на textTime.text = public float secondsInFullDay...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru