yyl
2026-05-11 51b0f6ed9f4e1d3bb6f8144470b46908c7699a96
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using UnityEngine;
using UnityEngine.UI; 
using System;
using Cysharp.Threading.Tasks;
 
// 一级界面带预制体,底部功能按钮样式
public class OneLevelWin : FunctionsBaseWin
{
    [NonSerialized] GroupButtonEx tabBtn;
    public FuncBtnData[] funcBtnDatas;
    [NonSerialized] Button closeBtn;
 
    bool isComponentReady = false;
 
    protected override void InitComponent()
    {
        InitComponentAsync().Forget();
    }
 
    protected override void OnPreOpen()
    {
        if (!isComponentReady)
        {
            WaitReadyThenOpen().Forget();
            return;
        }
        base.OnPreOpen();
    }
 
    private async UniTaskVoid WaitReadyThenOpen()
    {
        await UniTask.WaitUntil(() => isComponentReady || this == null);
        if (this == null) return;
        base.OnPreOpen();
    }
 
    private async UniTask InitComponentAsync()
    {
        // 创建
        var instance = await UIUtility.CreateWidget("OneLevelWin", "BottomTabs");
        if (this == null)
        {
            if (instance != null) DestroyImmediate(instance);
            return;
        }
        instance.transform.SetParent(_rectTransform, false);
        closeBtn = _rectTransform.GetComponent<Button>("BottomTabs/bg/backbtn");
        tabBtn = _rectTransform.GetComponent<GroupButtonEx>("BottomTabs/bg/btns/funcbtn");
        var btnParent = _rectTransform.GetComponent<RectTransform>("BottomTabs/bg/btns");
 
 
        tabButtons = new GroupButtonEx[funcBtnDatas.Length];
        for (int i = 0; i < tabButtons.Length; i++)
        {
            GameObject go = Instantiate(tabBtn.gameObject, btnParent);
            var data = funcBtnDatas[i];
            tabButtons[i] = go.GetComponent<GroupButtonEx>();
            tabButtons[i].name = $"funcbtn{i}";
            tabButtons[i].selectIcon.SetSprite(data.iconName);
            tabButtons[i].selectIcon.SetNativeSize();
            tabButtons[i].unSelectIcon.SetSprite(data.unSelectIconName);
            tabButtons[i].unSelectIcon.SetNativeSize();
            tabButtons[i].title.text = Language.Get(data.name);
            tabButtons[i].redpoint.redpointId = data.redpointID;
            tabButtons[i].SetActive(true);
        }
        base.InitComponent();
        closeBtn.AddListener(CloseWindow);
 
        isComponentReady = true;
    }
 
    protected override void OpenSubUIByTabIndex()
    {
    }
 
 
}
 
[Serializable]
public struct FuncBtnData
{
    public int redpointID;
    public string name;
    public string iconName; //默认显示的图标(选中)
    public string unSelectIconName; //图标(未选中)
}