using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// /// 游戏主界面 /// public class MainWin : UIBase { public GameObject windowBackground; // 底部按钮组 public Button[] bottomTabButtons; private GameObject[] bottomTabEffects; // 当前选中的底部标签索引 private int currentTabIndex = 0; // 当前打开的子界面 private UIBase currentSubUI; /// /// 初始化组件 /// protected override void InitComponent() { base.InitComponent(); // 初始化UI组件事件 InitButtonEvents(); } /// /// 初始化UI组件事件 /// private void InitButtonEvents() { // 初始化底部按钮 for (int i = 0; i < bottomTabButtons.Length; i++) { int index = i; // 捕获索引 bottomTabButtons[i].onClick.AddListener(() => { OnBottomTabButtonClicked(index); }); } } protected override void OnOpen() { base.OnOpen(); // 默认选中第一个标签 SelectBottomTab(0); // 刷新UI Refresh(); } public override void Refresh() { UpdatePlayerInfo(); UpdateCurrency(); } protected override void OnPreOpen() { base.OnPreOpen(); bottomTabEffects = new GameObject[bottomTabButtons.Length]; for (int i = 0; i < bottomTabButtons.Length; i++) { bottomTabEffects[i] = PlayUIEffect(1004, bottomTabButtons[i].transform, false); } } protected override void OnPreClose() { base.OnPreClose(); foreach (var effectGO in bottomTabEffects) { DestroyImmediate(effectGO); } bottomTabEffects = null; } /// /// 更新玩家信息 /// private void UpdatePlayerInfo() { // 从玩家数据中获取信息并更新UI // 例如: // playerNameText.text = PlayerData.Instance.Name; // playerLevelText.text = "Lv." + PlayerData.Instance.Level; // powerText.text = PlayerData.Instance.Power.ToString(); // expSlider.value = PlayerData.Instance.ExpRatio; } /// /// 更新货币信息 /// private void UpdateCurrency() { // 从玩家数据中获取货币信息并更新UI // 例如: // goldText.text = PlayerData.Instance.Gold.ToString(); // diamondText.text = PlayerData.Instance.Diamond.ToString(); // energyText.text = PlayerData.Instance.Energy + "/" + PlayerData.Instance.MaxEnergy; } /// /// 底部标签按钮点击 /// private void OnBottomTabButtonClicked(int index) { SelectBottomTab(index); } /// /// 选择底部标签 /// private void SelectBottomTab(int index) { // 如果点击当前已选中的标签,不做处理 if (currentTabIndex == index && currentSubUI != null) { return; } // 更新当前选中的标签索引 currentTabIndex = index; // 更新按钮状态 UpdateButtonsState(); // 关闭当前打开的子界面 CloseCurrentSubUI(); // 根据选中的标签打开对应的界面 OpenSubUIByTabIndex(index); } /// /// 更新按钮状态 /// private void UpdateButtonsState() { // 遍历所有按钮,设置选中状态 for (int i = 0; i < bottomTabButtons.Length; i++) { // 这里可以根据是否选中设置按钮的视觉效果 // 例如:改变图片、颜色等 // bottomTabButtons[i].GetComponent().color = (i == currentTabIndex) ? Color.blue : Color.white; // 或者激活/禁用选中图标 bottomTabButtons[i].image.color = (i == currentTabIndex) ? Color.white : Color.gray; } } /// /// 关闭当前打开的子界面 /// private void CloseCurrentSubUI() { if (currentSubUI != null) { // 关闭当前界面 currentSubUI.CloseWindow(); currentSubUI = null; } } /// /// 根据标签索引打开对应的子界面 /// private void OpenSubUIByTabIndex(int index) { Debug.Log("打开子界面 : " + index); // 主城 阵容 同盟 福利 冒险 windowBackground.SetActive(index != 4); //根据索引打开不同的界面 switch (index) { case 0: // 例如:打开主页界面 // currentSubUI = UIManager.Instance.OpenUI(); Debug.Log("打开主城界面"); break; case 1: // 例如:打开角色界面 // currentSubUI = UIManager.Instance.OpenUI(); Debug.Log("打开阵容界面"); break; case 2: // 例如:打开背包界面 // currentSubUI = UIManager.Instance.OpenUI(); Debug.Log("打开同盟界面"); break; case 3: // 例如:打开任务界面 // currentSubUI = UIManager.Instance.OpenUI(); Debug.Log("打开福利界面"); break; case 4: // 例如:打开设置界面 currentSubUI = UIManager.Instance.OpenWindow(); Debug.Log("打开冒险界面"); break; default: Debug.LogWarning("未知的标签索引: " + index); break; } } }