UI相关优化补充

This commit is contained in:
2026-05-25 13:21:41 +08:00
parent 3c812cfb41
commit a1f9122153
54 changed files with 2008 additions and 112 deletions

View File

@@ -26,6 +26,12 @@ namespace BaseGames.UI
[SerializeField] private Toggle _vSyncToggle;
[SerializeField] private TMP_Dropdown _fpsDropdown; // 30 / 60 / 120 / 无限
[Header("可访问性")]
[SerializeField] private Slider _uiScaleSlider; // 0.8 ~ 1.5
[SerializeField] private TMP_Text _uiScaleValueText; // 实时显示 "100%"
[SerializeField] private TMP_Dropdown _colorblindDropdown; // None / Prot / Deut / Trit
[SerializeField] private Toggle _screenShakeToggle;
[Header("按键重绑定")]
[SerializeField] private GameObject _rebindPanelRoot; // RebindPanel GameObject
@@ -59,10 +65,46 @@ namespace BaseGames.UI
_settings.SetTargetFrameRate(FpsOptions[Mathf.Clamp(i, 0, FpsOptions.Length - 1)]));
}
// ── 可访问性 ──────────────────────────────────────────────────────
if (_uiScaleSlider != null)
{
_uiScaleSlider.onValueChanged.RemoveAllListeners();
_uiScaleSlider.minValue = 0.8f;
_uiScaleSlider.maxValue = 1.5f;
_uiScaleSlider.value = Mathf.Clamp(data.UIScale, _uiScaleSlider.minValue, _uiScaleSlider.maxValue);
UpdateUIScaleLabel(_uiScaleSlider.value);
_uiScaleSlider.onValueChanged.AddListener(v =>
{
_settings.SetUIScale(v);
UpdateUIScaleLabel(v);
});
}
if (_colorblindDropdown != null)
{
_colorblindDropdown.onValueChanged.RemoveAllListeners();
_colorblindDropdown.value = (int)data.ColorblindMode;
_colorblindDropdown.onValueChanged.AddListener(i =>
_settings.SetColorblindMode((ColorblindMode)Mathf.Clamp(i, 0, 3)));
}
if (_screenShakeToggle != null)
{
_screenShakeToggle.onValueChanged.RemoveAllListeners();
_screenShakeToggle.isOn = data.ScreenShakeEnabled;
_screenShakeToggle.onValueChanged.AddListener(v => _settings.SetScreenShakeEnabled(v));
}
// 手柄导航:打开设置面板时将焦点置于主音量滑条
EventSystem.current?.SetSelectedGameObject(_masterVolume?.gameObject);
}
private void UpdateUIScaleLabel(float v)
{
if (_uiScaleValueText != null)
_uiScaleValueText.text = Mathf.RoundToInt(v * 100f) + "%";
}
// ── 辅助 ──────────────────────────────────────────────────────────────
private static void InitSlider(Slider slider, float value, UnityEngine.Events.UnityAction<float> onChange)