Files
5.24BuYu/Assets/MyGame/aa/UI/Home/Sub/UIHome_BY_SettingPenel.cs
T
2026-06-21 00:07:26 +08:00

121 lines
4.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class UIHome_BY_SettingPanel : SubUIBase
{
public Slider slider_AudioMusic;
public Slider slider_AudioEffect;
[Header("画质")]
public Toggle toggle_QualityLow;
public Toggle toggle_QualityMid;
public Toggle toggle_QualityHigh;
public ToggleGroup group_Quality;
[Header("帧率")]
public Toggle toggle_Fps30;
public Toggle toggle_Fps60;
public Toggle toggle_FpsUnlimited;
public ToggleGroup group_Fps;
private Dictionary<Toggle, Color> labelOriginalColors = new Dictionary<Toggle, Color>();
private static readonly Color SELECTED_COLOR = Color.white;
public override void Awake()
{
base.Awake();
slider_AudioMusic.value = PlayerPrefs.GetFloat("slider_AudioBG", 1f);
slider_AudioEffect.value = PlayerPrefs.GetFloat("slider_FX", 1f);
slider_AudioMusic.onValueChanged.AddListener((a) =>
{
PlayerPrefs.SetFloat("slider_AudioBG", a);
PlayerPrefs.Save();
});
slider_AudioEffect.onValueChanged.AddListener((a) =>
{
PlayerPrefs.SetFloat("slider_FX", a);
PlayerPrefs.Save();
});
// 画质
CacheToggleColor(toggle_QualityLow);
CacheToggleColor(toggle_QualityMid);
CacheToggleColor(toggle_QualityHigh);
int quality = PlayerPrefs.GetInt("GraphicsQuality", 1);
ApplyQuality(quality);
toggle_QualityLow?.onValueChanged.AddListener(a => { if (a) SetQuality(0); });
toggle_QualityMid?.onValueChanged.AddListener(a => { if (a) SetQuality(1); });
toggle_QualityHigh?.onValueChanged.AddListener(a => { if (a) SetQuality(2); });
// 帧率
CacheToggleColor(toggle_Fps30);
CacheToggleColor(toggle_Fps60);
CacheToggleColor(toggle_FpsUnlimited);
int fps = PlayerPrefs.GetInt("TargetFps", 1);
ApplyFps(fps);
toggle_Fps30?.onValueChanged.AddListener(a => { if (a) SetFps(0); });
toggle_Fps60?.onValueChanged.AddListener(a => { if (a) SetFps(1); });
toggle_FpsUnlimited?.onValueChanged.AddListener(a => { if (a) SetFps(2); });
}
private void CacheToggleColor(Toggle tg)
{
if (tg == null) return;
var label = tg.GetComponentInChildren<TextMeshProUGUI>();
if (label != null && !labelOriginalColors.ContainsKey(tg))
labelOriginalColors[tg] = label.color;
}
private void UpdateToggleColor(Toggle tg, bool selected)
{
if (tg == null || !labelOriginalColors.TryGetValue(tg, out var origColor)) return;
var label = tg.GetComponentInChildren<TextMeshProUGUI>();
if (label != null)
label.color = selected ? SELECTED_COLOR : origColor;
}
private void SetQuality(int level)
{
PlayerPrefs.SetInt("GraphicsQuality", level);
PlayerPrefs.Save();
ApplyQuality(level);
}
private void ApplyQuality(int level)
{
if (toggle_QualityLow != null) toggle_QualityLow.isOn = (level == 0);
if (toggle_QualityMid != null) toggle_QualityMid.isOn = (level == 1);
if (toggle_QualityHigh != null) toggle_QualityHigh.isOn = (level == 2);
UpdateToggleColor(toggle_QualityLow, level == 0);
UpdateToggleColor(toggle_QualityMid, level == 1);
UpdateToggleColor(toggle_QualityHigh, level == 2);
QualitySettings.SetQualityLevel(level, true);
}
private void SetFps(int level)
{
PlayerPrefs.SetInt("TargetFps", level);
PlayerPrefs.Save();
ApplyFps(level);
}
private void ApplyFps(int level)
{
if (toggle_Fps30 != null) toggle_Fps30.isOn = (level == 0);
if (toggle_Fps60 != null) toggle_Fps60.isOn = (level == 1);
if (toggle_FpsUnlimited != null) toggle_FpsUnlimited.isOn = (level == 2);
UpdateToggleColor(toggle_Fps30, level == 0);
UpdateToggleColor(toggle_Fps60, level == 1);
UpdateToggleColor(toggle_FpsUnlimited, level == 2);
switch (level)
{
case 0: Application.targetFrameRate = 30; break;
case 1: Application.targetFrameRate = 60; break;
case 2: Application.targetFrameRate = -1; break;
}
}
}