SaveSettingsSystem is a robust settings management framework for Unity. It provides a unified approach to handle game settings (audio, graphics, controls, etc.) with automatic serialization and persistence using PlayerPrefs.
-
Centralized Management
- Global settings registry through
AllSettingsManager - Automatic registration/unregistration of settings managers
- Scene-specific or persistent settings support
- Global settings registry through
-
Type Safety & Validation
- Generic implementation for type safety
- Automatic serialization validation
- Error handling and logging
-
Data Persistence
- Automatic PlayerPrefs serialization
- Custom key management
- Selective data deletion (NEW)
- Complete data cleanup support (NEW)
-
Event System
- Event-driven updates
- Change notifications
- UI synchronization
-
AllSettingsManagerpublic class AllSettingsManager : SingletonDD<AllSettingsManager> { public void SaveAllSettings() public void LoadAllSettings() public void ResetAllSettings() public T GetManager<T>() where T : MonoBehaviour }
-
BaseSettings<TData, TSettingsSO>public abstract class BaseSettings<TData, TSettingsSO> where TData : class, new() where TSettingsSO : ScriptableObject { public virtual void Save() public virtual void Load() public abstract void ResetToDefault() }
-
BaseSettingsManager<TSettings>public abstract class BaseSettingsManager<TSettings> : MonoBehaviour where TSettings : class, ISaveSettings
-
Create Settings Data Container
[CreateAssetMenu(fileName = "YourSettingsSO", menuName = "Settings/Your Settings")] public class YourSettingsSO : ScriptableObject { public float someValue = 1f; }
-
Implement Settings Class
public class YourSettings : BaseSettings<YourData, YourSettingsSO> { public YourSettings(YourSettingsSO settings) : base(settings, "YourSettings") { } protected override YourData GetDataFromSettings() { return new YourData { someValue = settingsSO.someValue }; } protected override void ApplyDataToSettings(YourData data) { settingsSO.someValue = data.someValue; } }
-
Create Manager
public class YourManager : BaseSettingsManager<YourSettings> { [SerializeField] private YourSettingsSO settingsSO; [SerializeField] private bool dontDestroyOnLoad; protected override void InitializeSettings() { settings = new YourSettings(settingsSO); } }
-
Save/Load Settings
// Through AllSettingsManager AllSettingsManager.Instance.SaveAllSettings(); AllSettingsManager.Instance.LoadAllSettings(); // Individual manager audioManager.Save(); audioManager.Load();
-
Delete Settings (NEW)
// Delete specific setting Save_Load_SettingsSystem_Functions.DeletePlayerPrefsByKey("AudioSettings"); // Delete all settings Save_Load_SettingsSystem_Functions.DeleteAllPlayerPrefs();
-
Reset Settings
AllSettingsManager.Instance.ResetAllSettings();
SaveSettingsSystem 是一个为Unity设计的稳健设置管理框架。它使用PlayerPrefs提供了统一的游戏设置(音频、图形、控制等)管理方案,具有自动序列化和持久化功能。
-
中央化管理
- 通过
AllSettingsManager进行全局设置注册 - 设置管理器的自动注册/注销
- 支持场景特定或持久化设置
- 通过
-
类型安全和验证
- 泛型实现确保类型安全
- 自动序列化验证
- 错误处理和日志记录
-
数据持久化
- 自动PlayerPrefs序列化
- 自定义键管理
- 选择性数据删除(新功能)
- 完整数据清理支持(新功能)
-
事件系统
- 事件驱动更新
- 变更通知
- UI同步
-
AllSettingsManager- 全局设置注册表
- 统一管理所有设置
- 提供中心化访问点
-
BaseSettings<TData, TSettingsSO>- 所有设置的抽象基类
- 处理序列化和持久化
- 提供类型安全的数据访问
-
BaseSettingsManager<TSettings>- 管理具体设置实例
- 处理UI绑定和生命周期
- 自动注册到全局管理器
-
创建设置数据容器
[CreateAssetMenu(fileName = "你的设置SO", menuName = "设置/你的设置")] public class YourSettingsSO : ScriptableObject { public float someValue = 1f; }
-
实现设置类
public class YourSettings : BaseSettings<YourData, YourSettingsSO> { public YourSettings(YourSettingsSO settings) : base(settings, "YourSettings") { } protected override YourData GetDataFromSettings() { return new YourData { someValue = settingsSO.someValue }; } protected override void ApplyDataToSettings(YourData data) { settingsSO.someValue = data.someValue; } }
-
创建管理器
public class YourManager : BaseSettingsManager<YourSettings> { [SerializeField] private YourSettingsSO settingsSO; [SerializeField] private bool dontDestroyOnLoad; protected override void InitializeSettings() { settings = new YourSettings(settingsSO); } }
-
保存/加载设置
// 通过全局管理器 AllSettingsManager.Instance.SaveAllSettings(); AllSettingsManager.Instance.LoadAllSettings(); // 单独管理器 频繁操作,先获取 - 使用方式1,先获取引用再复用 var audioManager = AllSettingsManager.Instance.GetManager<AudioManager>().Save(); AllSettingsManager.Instance.GetManager<AudioManager>().Load(); audioManager.Save(); audioManager.Load(); 偶尔操作,需要更新 - 使用方式2,无需维护引用 AllSettingsManager.Instance.GetManager<AudioManager>().Save(); AllSettingsManager.Instance.GetManager<AudioManager>().Load();
-
删除设置(新功能)
// 删除特定设置 Save_Load_SettingsSystem_Functions.DeletePlayerPrefsByKey("AudioSettings"); // 删除所有设置 Save_Load_SettingsSystem_Functions.DeleteAllPlayerPrefs();
-
重置设置
AllSettingsManager.Instance.ResetAllSettings();
-
错误处理
- 验证数据有效性
- 提供合理默认值
- 记录有意义的错误信息
-
性能优化
- 避免频繁保存
- 批量处理设置变更
- 合理使用事件系统
-
场景管理
- 明确设置所有权
- 正确的清理机制
- 场景转换处理
-
UI集成
- 响应式更新
- 验证反馈
- 用户友好的交互