121 lines
4.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |