// 本脚本只在不存在时会生成一次。已存在不会再次生成覆盖 using System.Collections.Generic; using UnityEngine; using NBC; using Unity.VisualScripting; namespace NBF { public partial class SettingPanel : UIPanel { public override string UIPackName => "Main"; public override string UIResName => "SettingPanel"; private List tabList = new List(); private object _currentSettingsObject; protected override void OnInit() { base.OnInit(); IsShowCursor = true; TabListSettingData tabInput = new TabListSettingData(); tabInput.Tab = new TabItemData(); tabInput.Tab.Name = "键盘和鼠标"; tabList.Add(tabInput); TabListSettingData tabCtrl = new TabListSettingData(); tabCtrl.Tab = new TabItemData(); tabCtrl.Tab.Name = "控制器"; tabList.Add(tabCtrl); TabListSettingData tabVideo = new TabListSettingData(); tabVideo.Tab = new TabItemData(); tabVideo.Tab.Name = "视频"; tabVideo.SettingsObject = GameSettings.Instance.UseSettings; tabList.Add(tabVideo); TabListSettingData tabSound = new TabListSettingData(); tabSound.Tab = new TabItemData(); tabSound.Tab.Name = "音频和语言"; tabList.Add(tabSound); Menu.OnTabChange += ChangeTab; } protected override void OnShow() { Menu.SetTabs(tabList); } private void ChangeTab(int index) { Log.Info($"Change tab index={index}"); var tabListData = tabList[index]; _currentSettingsObject = tabListData.SettingsObject; ResetSettingList(); } private void ResetSettingList() { List.RemoveChildrenToPool(); if (_currentSettingsObject == null) return; var fields = _currentSettingsObject.GetType().GetFields(); foreach (var field in fields) { if (List.AddItemFromPool() is SettingItem item) { item.SetData(field, _currentSettingsObject); } } } private void Reset() { } private void Save() { } protected override void OnHide() { base.OnHide(); } protected override void OnDestroy() { base.OnDestroy(); } } }