Что это: SaveProvider — статический фасад поверх активного ISaveProvider, который даёт API в стиле PlayerPrefs и проксирует события сохранения, загрузки и изменения ключей. Файл: Scripts/Save/SaveProvider.cs, пространство имён: Neo.Save.
Как использовать:
- Вызывайте
GetInt,SetString,GetBoolи другие методы из любого runtime-кода. - Если отдельный backend не задан, система инициализирует
PlayerPrefsSaveProvider. - Если нужен другой backend, настройте
SaveProviderSettingsComponentили вызовитеSetProvider()из кода. - Подписывайтесь на
OnDataSaved,OnDataLoadedиOnKeyChanged, если нужно реагировать на изменения.
- Инициализируется лениво при первом обращении.
- Ищет
SaveProviderSettingsвResources. - Если настройки не найдены, использует
PlayerPrefsSaveProvider. - Проксирует вызовы к активному провайдеру.
- Проксирует события провайдера наружу через единый статический API.
- При замене провайдера корректно снимает старые подписки и вешает новые.
| API | Описание |
|---|---|
CurrentProvider |
Текущий активный ISaveProvider. |
SetProvider(provider) |
Явно подменяет активный провайдер. |
GetInt / SetInt |
Работа с int. |
GetFloat / SetFloat |
Работа с float. |
GetString / SetString |
Работа со строками. |
GetBool / SetBool |
Работа с bool. |
HasKey |
Проверяет наличие ключа. |
DeleteKey |
Удаляет один ключ. |
DeleteAll |
Очищает всё хранилище провайдера. |
Save() |
Принуждает провайдер сохранить данные. |
Load() |
Принуждает провайдер обновить/загрузить данные. |
| Событие | Когда вызывается |
|---|---|
OnDataSaved |
После Save() у активного провайдера. |
OnDataLoaded |
После Load() у активного провайдера. |
OnKeyChanged |
Когда провайдер сообщает об изменении конкретного ключа. |
SaveProviderне хранит данные сам по себе, он только делегирует вызовы текущему backend.- После исправления event-forwarding старые обработчики больше не остаются висеть на предыдущем провайдере после
SetProvider(). - Если вы меняете провайдер в runtime, подписчики на события
SaveProviderпродолжают работать через новый backend без повторной подписки.
Используйте SaveProvider, если:
- нужен простой key/value API без прямой привязки к
PlayerPrefs; - backend должен быть сменяемым;
- вы не работаете с scene-component persistence через
SaveManager.
using Neo.Save;
public static class SettingsStorage
{
public static void SaveVolume(float value)
{
SaveProvider.SetFloat("audio.volume", value);
SaveProvider.Save();
}
public static float LoadVolume()
{
return SaveProvider.GetFloat("audio.volume", 1f);
}
}