C#

Сохранение объектов сцены в Unity

У меня есть сцена, на которой есть объекты. При выходе надо их сохранить, а при заходе - загрузить. Как это можно сделать? Как можно сохранить GameObject используя PlayerPrefs или что - то простое, без использования сереализации
на объекте множество компонентов, для начала определись с нужными для твоей задачи полями в этих компонентах, которые ты хочешь сохранить.

скорее всего я предположу что в твоём случае будет достаточно сохранять все поля компонента Transform и Velocity у Rigidbody.

https://pastebin.com/UVW83LfK < код
на настукивания этой горы текста у меня ушло 15 минут.
Это время можно было сократить в 3 раза, если бы я создал метод SaveVector3/LoadVector3
но это уже путь в сторону "усложнения", избежать которое ты хочешь.

А так же, если ты делаешь игру для PC, тогда лучше не использовать PlayerPrefs для этих целей, так как он сохраняет эту огромную кучу полей в риестр, сохранение сцены из 100 таких объектов, очень сильно будет нагружать систему.

По этому лучше потрать пару часов на изучения сериализации / библиотеки System.IO
и напиши свою системы сохранения.
Ну или используй один из огромного числа ассетов в ассетсторе
Дмитрий Каух
Дмитрий Каух
650
Лучший ответ
Если простое, то через библиотеку System.IO .
Значения их компонентов записывать в файл построчно и так же считывать. В отличие от PlayerPrefs можно будет создать систему сохранений, в которой иметь много сохранений.
какое совпадение), я только что это сделал, так что возможно помогу. 1. Для начала надо создать скрипт, в котором мы будем проводить операции с сохранением, будем использоавть PlayerPrefs.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class NextLevel : MonoBehaviour

{
private bool DeleteInfo;

public int LevelNum;

public void Update()
{

// Здесь удаляем всё, если нажмём на клавишу D
if (Input.GetKey(KeyCode.D))
{
DeleteInfo = true;
PlayerPrefs.DeleteAll();
PlayerPrefs.Save ();
}
}

public void Start()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);

LevelNum = SceneManager.GetActiveScene().buildIndex + 1;

PlayerPrefs.SetInt("Level", LevelNum);
PlayerPrefs.Save ();

}

2. Создаём второй скрипт в котором будет сама так сказать инициализация.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LevelThis : MonoBehaviour
{
void Start()
{
if (SceneManager.GetActiveScene().buildIndex != PlayerPrefs.GetInt("Level"))
{
SceneManager.LoadScene(PlayerPrefs.GetInt("Level"));
}
}
}

3. Заходим в Unity и кидаем эти оба скрипта на камеру, готово! Надеюсь это тебе поможет, я сам еле-еле написал это в свою игру т.к. нихера не понятно объясняют на ютубе и т.п.