using UnityEngine; using UnityEngine.UI; public class SystemSetWin : UIBase { [SerializeField] Slider musicSlider; [SerializeField] Slider soundEffectSlider; // 静音音乐 [SerializeField] Toggle muteMusic; // 静音音效 [SerializeField] Toggle muteSoundEffect; // 主线战斗 [SerializeField] Toggle toggleStory; // 非主线战斗 [SerializeField] Toggle toggleNonStory; // 伤害飘字 [SerializeField] Toggle toggleDamageTips; // 非伤害飘字 [SerializeField] Toggle toggleNonDamageTips; // buff飘字 [SerializeField] Toggle toggleBuffFloatingTips; // buff图标显示 [SerializeField] Toggle toggleBuffIconShow; private BattlePerformSwitch currentSwitch; protected override void InitComponent() { base.InitComponent(); } protected override void OnPreOpen() { base.OnPreOpen(); // 音量滑块 musicSlider.onValueChanged.RemoveListener(OnSliderBgMusic); musicSlider.onValueChanged.AddListener(OnSliderBgMusic); soundEffectSlider.onValueChanged.RemoveListener(OnSliderSoundEffect); soundEffectSlider.onValueChanged.AddListener(OnSliderSoundEffect); musicSlider.value = SystemSetting.Instance.GetSoundVolume(); soundEffectSlider.value = SystemSetting.Instance.GetSoundEffect(); // 静音开关 muteMusic.onValueChanged.RemoveListener(OnMuteMusicChanged); muteMusic.onValueChanged.AddListener(OnMuteMusicChanged); muteSoundEffect.onValueChanged.RemoveListener(OnMuteSoundEffectChanged); muteSoundEffect.onValueChanged.AddListener(OnMuteSoundEffectChanged); muteMusic.isOn = SystemSetting.Instance.GetMuteMusic(); muteSoundEffect.isOn = SystemSetting.Instance.GetMuteSoundEffect(); // 应用静音状态 SoundPlayer.Instance.musicAudioSource.mute = muteMusic.isOn; // 战斗类型切换(互斥) toggleStory.onValueChanged.RemoveListener(OnToggleStoryChanged); toggleStory.onValueChanged.AddListener(OnToggleStoryChanged); toggleNonStory.onValueChanged.RemoveListener(OnToggleNonStoryChanged); toggleNonStory.onValueChanged.AddListener(OnToggleNonStoryChanged); // 默认选中主线战斗 toggleStory.isOn = true; toggleNonStory.isOn = false; currentSwitch = BattleSwitch.storySwitch; // 战斗表现开关 toggleDamageTips.onValueChanged.RemoveListener(OnToggleDamageTipsChanged); toggleDamageTips.onValueChanged.AddListener(OnToggleDamageTipsChanged); toggleNonDamageTips.onValueChanged.RemoveListener(OnToggleNonDamageTipsChanged); toggleNonDamageTips.onValueChanged.AddListener(OnToggleNonDamageTipsChanged); toggleBuffFloatingTips.onValueChanged.RemoveListener(OnToggleBuffFloatingTipsChanged); toggleBuffFloatingTips.onValueChanged.AddListener(OnToggleBuffFloatingTipsChanged); toggleBuffIconShow.onValueChanged.RemoveListener(OnToggleBuffIconShowChanged); toggleBuffIconShow.onValueChanged.AddListener(OnToggleBuffIconShowChanged); // 初始化战斗表现开关的状态 RefreshBattlePerformToggles(); } protected override void OnPreClose() { base.OnPreClose(); } private void OnSliderSoundEffect(float arg0) { SystemSetting.Instance.SetSoundEffect(arg0); } private void OnSliderBgMusic(float arg0) { SystemSetting.Instance.SetSoundVolume(arg0); } private void OnMuteMusicChanged(bool value) { SystemSetting.Instance.SetMuteMusic(value); SoundPlayer.Instance.musicAudioSource.mute = value; } private void OnMuteSoundEffectChanged(bool value) { SystemSetting.Instance.SetMuteSoundEffect(value); // 音效静音可以通过控制音量实现,但不影响slider的值 // 这里需要控制所有音效源,可以使用SoundPlayer的全局控制 } private void OnToggleStoryChanged(bool value) { if (value) { // ToggleGroup 会自动处理互斥,不需要手动设置另一个为 false currentSwitch = BattleSwitch.storySwitch; RefreshBattlePerformToggles(); } } private void OnToggleNonStoryChanged(bool value) { if (value) { // ToggleGroup 会自动处理互斥,不需要手动设置另一个为 false currentSwitch = BattleSwitch.nonStorySwitch; RefreshBattlePerformToggles(); } } private void RefreshBattlePerformToggles() { if (currentSwitch == null) return; // 临时移除监听器以避免循环触发 toggleDamageTips.onValueChanged.RemoveListener(OnToggleDamageTipsChanged); toggleNonDamageTips.onValueChanged.RemoveListener(OnToggleNonDamageTipsChanged); toggleBuffFloatingTips.onValueChanged.RemoveListener(OnToggleBuffFloatingTipsChanged); toggleBuffIconShow.onValueChanged.RemoveListener(OnToggleBuffIconShowChanged); // 更新UI状态 toggleDamageTips.isOn = currentSwitch.DamageTips; toggleNonDamageTips.isOn = currentSwitch.NonDamageTips; toggleBuffFloatingTips.isOn = currentSwitch.BuffAction; toggleBuffIconShow.isOn = currentSwitch.BuffIcon; // 重新添加监听器 toggleDamageTips.onValueChanged.AddListener(OnToggleDamageTipsChanged); toggleNonDamageTips.onValueChanged.AddListener(OnToggleNonDamageTipsChanged); toggleBuffFloatingTips.onValueChanged.AddListener(OnToggleBuffFloatingTipsChanged); toggleBuffIconShow.onValueChanged.AddListener(OnToggleBuffIconShowChanged); } private void OnToggleDamageTipsChanged(bool value) { if (currentSwitch != null) { currentSwitch.DamageTips = value; } } private void OnToggleNonDamageTipsChanged(bool value) { if (currentSwitch != null) { currentSwitch.NonDamageTips = value; } } private void OnToggleBuffFloatingTipsChanged(bool value) { if (currentSwitch != null) { currentSwitch.BuffAction = value; } } private void OnToggleBuffIconShowChanged(bool value) { if (currentSwitch != null) { currentSwitch.BuffIcon = value; } } }