Unity

Unity - Settings Manager (менеджер настроек и сохранений)

Unity - Settings Manager (менеджер настроек и сохранений) это класс в котором мы будем записывать пользовательские данные и считывать их. В нашем случае класс SettingsManager инстанцируется в StartupManager на сцене с загрузочным экраном.

В Unity пользовательские данные можно хранить в различных форматах, например, в json. Однако, если вы только начинаете работать с Unity, то лучше воспользоваться стандартными методами класса PlayerPrefs, который предлагается в Unity по умолчанию.

Стоит отметить, что PlayerPrefs подойдет для хранения небольшого количества данных, таких как: очки, здоровье, имя пользователя, язык. Если необходимо хранить более объемные данные, например, информацию об уровнях, координаты, прогресс прохождения, то лучше выбрать json формат для хранения или что-то еще.

Вне зависимости от вашего выбора и методов хранения данных SettingsManager будет идти впереди остальных менеджеров, т.к. через него они будут записывать и получать какие-либо сохраненные настройки и данные.

Как правило, SettingsManager будет намного сложнее, чем приведенный пример ниже, однако, для простых проектов данного примера с незначительными доработками может быть вполне достаточно:
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.SceneManagement;
  4.  
  5. public class SettingsManager : MonoBehaviour {
  6.  
  7.     // в Awake мы инициализируем класс и предотвращаем
  8.     // его удаление при открытии новой сцены
  9.  
  10.     public static SettingsManager instance;
  11.  
  12.     void Awake () 
  13.     {
  14.         if (instance == null)
  15.         {
  16.             instance = this;
  17.         } 
  18.         else if (instance != this)
  19.         {
  20.             Destroy (gameObject);
  21.         }
  22.  
  23.         DontDestroyOnLoad (gameObject);
  24.     }
  25.  
  26.     // PlayerPrefs.GetInt(key) - получаем ранее записанное 
  27.     // значение (int) по ключу (string).
  28.     // PlayerPrefs.HasKey(key) - проверяем существует ли
  29.     // такое значение, если нет вернем 0
  30.  
  31.     public int GetIntValue(string key)
  32.     {
  33. 	int data = 0;
  34.  
  35. 	if(PlayerPrefs.HasKey(key))
  36. 	{
  37. 		data = PlayerPrefs.GetInt(key);
  38.         }
  39.  
  40.         return data;
  41.     }
  42.  
  43.     // PlayerPrefs.SetInt(key, value) - устанавливаем данные
  44.     // PlayerPrefs.Save() - записываем все изменения в постоянную память
  45.  
  46.     public void SetIntValue(string key, int value)
  47.     {
  48.         PlayerPrefs.SetInt(key, value);
  49.         PlayerPrefs.Save();
  50.     }
  51. }

Пример использования скрипта может выглядеть следующим образом, запишем и сразу получим какое-либо значение и выведем его в консоль:
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.SceneManagement;
  4.  
  5. public class TestManager : MonoBehaviour {
  6.  
  7.     void Start () 
  8.     {
  9.         SettingsManager.instance.SetIntValue("test", 555);
  10.  
  11.         Debug.Log( SettingsManager.instance.GetIntValue("test") );
  12.     }
  13.  
  14. }