using UnityEngine; using DG.Tweening; using Cysharp.Threading.Tasks; public class EquipOnMainUI : MonoBehaviour { [SerializeField] RectTransform[] slotEquips; //装备格子 [SerializeField] RectTransform[] flyEquips; [SerializeField] RectTransform flyStartPos; EquipCell[] m_EquipSlots; EquipCell[] m_EquipFlySlots; void Awake() { if (m_EquipSlots == null) { m_EquipSlots = new EquipCell[slotEquips.Length]; for (int i = 0; i < slotEquips.Length; i++) { m_EquipSlots[i] = slotEquips[i].GetComponent(); } } if (m_EquipFlySlots == null) { m_EquipFlySlots = new EquipCell[flyEquips.Length]; for (int i = 0; i < flyEquips.Length; i++) { m_EquipFlySlots[i] = flyEquips[i].GetComponent(); } } } //主界面切换模式触发 private void OnEnable() { PackManager.Instance.refrechPackEvent += OnRefrechPackEvent; //packModel.refreshItemCountEvent += PackModel_refreshItemCountEvent; EquipModel.Instance.OnEquipOPResultAction += OnEquipResult; DisplaySlotEquip(); for (int i = 0; i < flyEquips.Length; i++) { flyEquips[i].SetActive(false); } } private void OnDisable() { PackManager.Instance.refrechPackEvent -= OnRefrechPackEvent; //packModel.refreshItemCountEvent -= PackModel_refreshItemCountEvent; EquipModel.Instance.OnEquipOPResultAction -= OnEquipResult; } void OnRefrechPackEvent(PackType type) { if (type == PackType.Equip) { DisplaySlotEquip(); } } private void OnEquipResult(bool isDone, int index) { //穿戴或者 替换且分解成功,才做飘的表现,未分解的不做表现 if (!isDone) { return; } FlyToEquipGird(index); } //显示装备格子 void DisplaySlotEquip() { for (int i = 0; i < slotEquips.Length; i++) { var equipItem = PackManager.Instance.GetItemByIndex(PackType.Equip, i); m_EquipSlots[i].Init(equipItem); } } void FlyToEquipGird(int equipIndex) { var equipInfo = PackManager.Instance.GetItemByIndex(PackType.Equip, equipIndex); var flyEquip = m_EquipFlySlots[equipIndex]; if (equipInfo == null) { flyEquip.SetActive(false); return; } int itemID = equipInfo.config.ID; flyEquip.Init(equipInfo); flyEquip.SetActive(true); flyEquip.transform.localPosition = new Vector3(flyStartPos.localPosition.x + Random.Range(-80, 80), flyStartPos.localPosition.y + Random.Range(-20, 20), 0); FlyToEquipCell(flyEquip, equipIndex, equipInfo).Forget(); } async UniTask FlyToEquipCell(EquipCell flyEquip, int equipIndex, ItemModel equipInfo) { //等待界面关闭后,才处理后续逻辑 while (UIManager.Instance.IsOpened()) { await UniTask.Yield(); } flyEquip.transform.DOMove(new Vector3(slotEquips[equipIndex].position.x, slotEquips[equipIndex].position.y, 0), 0.5f).OnComplete(() => { flyEquip.SetActive(false); slotEquips[equipIndex].SetActive(true); m_EquipSlots[equipIndex].Init(equipInfo); //itemCell变大再变回1倍 slotEquips[equipIndex].transform.DOScale(Vector3.one * 1.3f, 0.3f).OnComplete(() => { slotEquips[equipIndex].transform.DOScale(Vector3.one, 0.3f); }); }); } }