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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
using UnityEngine;
using UnityEngine.UI;
using System;
using Cysharp.Threading.Tasks;
 
public class BattleBuffCell : MonoBehaviour
{
    ImageEx m_buffIcon;
    ImageEx buffIcon
    {
        get
        {
            if (m_buffIcon == null)
            {
                m_buffIcon = this.transform.GetComponent<ImageEx>("Container_BuffCell/Img_Icon");
            }
            return m_buffIcon;
        }
    }
 
    Button m_buffButton;
    Button buffButton
    {
        get
        {
            if (m_buffButton == null)
            {
                m_buffButton = gameObject.GetComponent<Button>();
            }
            return m_buffButton;
        }
    }
 
    TextEx m_BuffLayer;
 
    TextEx buffLayer
    {
        get
        {
            if (m_BuffLayer == null)
            {
                m_BuffLayer = this.transform.GetComponent<TextEx>("Container_BuffCell/Text_Layer");
            }
            return m_BuffLayer;
        }
    }
 
    // void Start()
    // {
    //     LoadPrefab();
    // }
 
    GameObject cellContainer;
 
    private async UniTask LoadPrefab()
    {
        if (cellContainer != null)
            return;
 
        var tmp = transform.Find("Container_BuffCell");
        if (tmp != null)
        {
            cellContainer = tmp.gameObject;
            return;
        }
 
        if (cellContainer == null)
        {
            var inst = await UIUtility.CreateWidget("BattleBuffCell", "Container_BuffCell");
            if (this == null)
            {
                if (null != inst) DestroyImmediate(inst);
                return;
            }
 
            if (cellContainer != null)
            {
                DestroyImmediate(inst);
                return;
            }
            cellContainer = inst;
 
            if (cellContainer != null)
            {
                cellContainer.transform.SetParentEx(this.transform, Vector3.zero, Quaternion.identity, Vector3.one);
                cellContainer.transform.SetAsFirstSibling();
            }
        }
 
        //缩放到和父rect一样大
        // var scale = 1f;
        // var rect = cellContainer.GetComponent<RectTransform>();
        // var parentRect = transform.GetComponent<RectTransform>();
        // float width = parentRect.sizeDelta.x;
        // if (width <= 0f)
        // {
        //     //外部控制了尺寸获取为0
        //     GridLayoutGroup grid = GetComponentInParent<GridLayoutGroup>();
        //     if (grid != null)
        //     {
        //         width = grid.cellSize.x;
        //     }
 
        // }
        // scale = width / rect.sizeDelta.x;
        // cellContainer.transform.localScale = cellContainer.transform.localScale * scale;
    }
 
    public async UniTask Init(HB428_tagSCBuffRefresh buffData, Action onclick = null, bool showType = false)
    {
        if (null == buffData || gameObject == null)
        {
            return;
        }
        await LoadPrefab();   //存在被卸载的可能,重新加载
        if (this == null) return;
        var config = SkillConfig.Get((int)buffData.SkillID);
        if (config == null)
        {
            Debug.LogErrorFormat("技能未配置 : {0}", buffData.SkillID);
            return;
        }
        buffIcon.SetOrgSprite(config.BuffIconName, "BuffIcon");
 
        buffButton.AddListener(() =>
        {
            onclick?.Invoke();
        });
 
        buffLayer.text = buffData.Layer == 0 ? "" : buffData.Layer.ToString();
    }
}