摄像机区域的架构改动
This commit is contained in:
66
Assets/_Game/Scripts/UI/Menus/SettingsPanelController.cs
Normal file
66
Assets/_Game/Scripts/UI/Menus/SettingsPanelController.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using BaseGames.Core;
|
||||
|
||||
namespace BaseGames.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// 设置面板控制器(架构 10_UIModule §7)。
|
||||
/// 驱动 SettingsManager 的音量与画面设置,并从当前配置初始化控件值。
|
||||
/// </summary>
|
||||
public class SettingsPanelController : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private SettingsManager _settings;
|
||||
|
||||
[Header("音量滑条")]
|
||||
[SerializeField] private Slider _masterVolume;
|
||||
[SerializeField] private Slider _bgmVolume;
|
||||
[SerializeField] private Slider _sfxVolume;
|
||||
[SerializeField] private Slider _ambientVolume;
|
||||
|
||||
[Header("画面")]
|
||||
[SerializeField] private Toggle _vSyncToggle;
|
||||
[SerializeField] private TMP_Dropdown _fpsDropdown; // 30 / 60 / 120 / 无限
|
||||
|
||||
[Header("按键重绑定")]
|
||||
[SerializeField] private GameObject _rebindPanelRoot; // RebindPanel GameObject
|
||||
|
||||
private static readonly int[] FpsOptions = { 30, 60, 120, -1 };
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (_settings == null) return;
|
||||
var data = _settings.Current;
|
||||
|
||||
// 初始化控件值(不触发 onChange;先移除监听再设置值再添加)
|
||||
InitSlider(_masterVolume, data.MasterVolume, v => _settings.SetMasterVolume(v));
|
||||
InitSlider(_bgmVolume, data.BGMVolume, v => _settings.SetBGMVolume(v));
|
||||
InitSlider(_sfxVolume, data.SFXVolume, v => _settings.SetSFXVolume(v));
|
||||
InitSlider(_ambientVolume,data.AmbientVolume, v => _settings.SetAmbientVolume(v));
|
||||
|
||||
if (_vSyncToggle != null)
|
||||
{
|
||||
_vSyncToggle.isOn = data.VSync;
|
||||
_vSyncToggle.onValueChanged.AddListener(v => _settings.SetVSync(v));
|
||||
}
|
||||
|
||||
if (_fpsDropdown != null)
|
||||
{
|
||||
int idx = System.Array.IndexOf(FpsOptions, data.TargetFPS);
|
||||
_fpsDropdown.value = idx >= 0 ? idx : 1; // default 60
|
||||
_fpsDropdown.onValueChanged.AddListener(i =>
|
||||
_settings.SetTargetFrameRate(FpsOptions[Mathf.Clamp(i, 0, FpsOptions.Length - 1)]));
|
||||
}
|
||||
}
|
||||
|
||||
// ── 辅助 ──────────────────────────────────────────────────────────────
|
||||
|
||||
private static void InitSlider(Slider slider, float value, UnityEngine.Events.UnityAction<float> onChange)
|
||||
{
|
||||
if (slider == null) return;
|
||||
slider.value = value;
|
||||
slider.onValueChanged.AddListener(onChange);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user