Как сохранять массив GameObject-ов
Как сохранить и загрузить GameObject[] в Unity?
Пробовал через PlayerPrefs, но он работает через раз..
Ответы (1 шт):
Лучший способ сохранения не только GameObject-ов, но и всего остального это использоватьPlayerPrefs и JsonUtility вместе.
Сохранение
Для сохранения в PlayerPrefs нужно писать так:
PlayerPrefs.SetString(string keyName, string objectToSave);
... где keyName это название ключа, а objetcToSave это на данном случае строковое поле которое мы хотим сохранить. Ключ это слово которое вы сами должны придумать и под этим названием будет сохраниться переменная.
А в JsonUtility сохраняем вот так:
string keyName = JsonUtility.ToJson(object objectToSave);
Ключ тут создаётся автоматически, при чём объект который вы хотите сохранить кодируется под строку (это и есть сам ключ).
Если их соединить получаем более качественный и удобный способ сохранения.
PlayerPrefs.SetString(string keyName, JsonUtility.ToJson(object objectToSave));
Тут вместо строки передаём зашифрованный ключ. Так сказать сохраняем ключ в ключе. В итоге у нас получается так:
private GameObject[] GameObjects;
public void Save()
{
PlayerPrefs.SetString("SecretKey007" ,JsonUtility.ToJson(GameObjects));
}
Загрузка
Вы наверно думали зачем все эти ключи. Чтобы восстановить переменную - я скажу вам.
В PlayerPrefs это выглядит так:
string objectToLoad = PlayerPrefs.GetString(string keyName);
В JsonUtility загрузка почти не отличается от PlayerPrefs только там надо определить тип объекта. То есть:
T objectToLoad = JsonUtility.FromJson<T>(string keyName);
Где T это тип - int, bool, object, Vector2, GameObject[] и так далее.
Теперь соединяем:
private GameObject[] GameObjects;
public void Load()
{
GameObjects = JsonUtility.FromJson<GameObject[]>(PlayePrefs.GetString("SecretKey007"));
}
Полный скрипт
Полный скрипт будет у нас таким:
private GameObject[] GameObjects;
public void Save()
{
PlayerPrefs.SetString("SecretKey007" ,JsonUtility.ToJson(GameObjects));
}
public void Load()
{
GameObjects = JsonUtility.FromJson<GameObject[]>(PlayePrefs.GetString("SecretKey007"));
}
Для дальнейшего сохранения и загрузки используем функции Save и Load. Например:
private void OnApplicationPause(bool isPaused)
{
if(isPaused)
{
Save();
}
else
{
Load();
}
}