diff --git a/Assets/_Game/Scripts/Core/Save/SaveMigrator.cs b/Assets/_Game/Scripts/Core/Save/SaveMigrator.cs index 30679f1..240f672 100644 --- a/Assets/_Game/Scripts/Core/Save/SaveMigrator.cs +++ b/Assets/_Game/Scripts/Core/Save/SaveMigrator.cs @@ -48,8 +48,8 @@ namespace BaseGames.Core.Save { // 2.2 删除 EquipmentSaveData.NotchesUsed(冗余,由 TryEquipCharm 重新计算)。 // 2.2 删除 PlayerSaveData.ShieldHP / ShieldIsBroken(护盾在存档点始终全满,无需持久化)。 - // 2.2 删除 SettingsSaveData.Language(全局设置由 SettingsManager 写入 settings.json)。 - // 旧存档中这些字段由 Newtonsoft.Json 的 [JsonExtensionData] 忽略,无需额外处理。 + // SettingsSaveData.Language 字段保留(由 LocalizationManager 负责按存档槽读写)。 + // 旧存档中已删除的字段由 Newtonsoft.Json 的 [JsonExtensionData] 忽略,无需额外处理。 // Equipment.MaxNotches:旧存档若为 0,EquipmentManager.OnLoad 回退到初始 Notch 数量。 if (data.Equipment != null && data.Equipment.MaxNotches == 0) data.Equipment.MaxNotches = 0; // 保持 0,OnLoad 回退到 config.initialNotchCount diff --git a/Assets/_Game/Scripts/Player/PlayerStats.cs b/Assets/_Game/Scripts/Player/PlayerStats.cs index 9d301c1..1e9820a 100644 --- a/Assets/_Game/Scripts/Player/PlayerStats.cs +++ b/Assets/_Game/Scripts/Player/PlayerStats.cs @@ -85,8 +85,17 @@ namespace BaseGames.Player _unlockedAbilities = _config.InitialAbilities; } - private void OnEnable() => _onDifficultyChanged?.Subscribe(HandleDifficultyChanged).AddTo(_subs); - private void OnDisable() => _subs.Clear(); + private void OnEnable() + { + ServiceLocator.GetOrDefault()?.Register(this); + _onDifficultyChanged?.Subscribe(HandleDifficultyChanged).AddTo(_subs); + } + + private void OnDisable() + { + ServiceLocator.GetOrDefault()?.Unregister(this); + _subs.Clear(); + } private void HandleDifficultyChanged(DifficultyLevel _) { diff --git a/Assets/_Game/Scripts/Progression/AchievementManager.cs b/Assets/_Game/Scripts/Progression/AchievementManager.cs index 51f5428..abd4a6e 100644 --- a/Assets/_Game/Scripts/Progression/AchievementManager.cs +++ b/Assets/_Game/Scripts/Progression/AchievementManager.cs @@ -41,6 +41,9 @@ namespace BaseGames.Progression InitStates(); } + private void OnEnable() => ServiceLocator.GetOrDefault()?.Register(this); + private void OnDisable() => ServiceLocator.GetOrDefault()?.Unregister(this); + private void OnDestroy() { ServiceLocator.Unregister(this);