using UnityEngine; using A2W; using Cysharp.Threading.Tasks; using System.Collections.Generic; using DG.Tweening; public class MessagePanel : UIPanel { [SerializeField] MessageElement messageElementPrefab; [SerializeField] RectTransform content; List messages; public override void Init() { messages = new List(); } public override async UniTask Show() { await UniTask.Yield(); gameObject.SetActive(true); } public override async UniTask Hide() { await UniTask.Yield(); gameObject.SetActive(false); } public void AddMessage(string message, float duration = -1) { // 默认加到开头 AddMessage(message, duration, 0); } public void AddMessage(string message, float duration, int index) { var msgEle = Instantiate(messageElementPrefab, content, false); msgEle.Init(this, message, duration); //messages.Add(msgEle); messages.Insert(index, msgEle); UpdateMessagesPosY(); } public void DelMessage(string message) { foreach (var msg in messages) { if (msg.Message == message) { DelMessage(msg); break; } } } public async void DelMessage(MessageElement msgEle) { messages.Remove(msgEle); Destroy(msgEle.gameObject); await UniTask.Yield(); UpdateMessagesPosY(); } public void UpdateMessagesPosY() { // 根据messageElement的index使用Dotween移动PosY到指定位置(-index * Height for (int i = 0; i < messages.Count; i++) { messages[i].RectTransform.DOAnchorPosY(-i * messages[i].RectTransform.rect.height, 0.2f); } } }