Unity3D UGUI实现Toast
项目中有些信息需要以Toast的形式体现出来,不需要交互,弹出后一段时间后消失,多个Toast会向上重叠,下面是一个UGUI Toast的实现,动画部份用到了Dotween来实现
首先需要制作Toast预制体,预制体初始化后就进行淡出动画,初始化的过程中根据str长度改变父节点图片大小
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; public class ToastHandler : MonoBehaviour { public Image image; public Text text; //初始化 public void InitToast(string str,System.Action callback) { text.text = str; int StrLenth = str.Length; int ToastWidth = 1; int ToastHeight = 1; if (StrLenth > 10) { ToastHeight = (StrLenth / 10)+1; ToastWidth = 10; } else { ToastWidth = StrLenth; } image.rectTransform.sizeDelta = new Vector2(50* ToastWidth + 100, 50* ToastHeight + 100); FadeOut(callback); } public void FadeOut(System.Action callback) { image.DOFade(0,2).OnComplete(()=> { callback.Invoke(); Destroy(gameObject); }); text.DOFade(0,2); } //堆叠向上移动 public void Move(float speed, int targetPos) { transform.DOLocalMoveY(targetPos * image.rectTransform.sizeDelta.y, speed); } }
然后需要一个Manager来创建和管理这些Toast预制体,使用单例模式方便其他地方调用,初始化预制体的时候要传一个回调,预制体淡出销毁前要从Manager的列表里面Remove掉
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ToastManager : MonoBehaviour { private static ToastManager Instance; public static ToastManager GetInstance() { return Instance; } private void Awake() { Instance = this; } public GameObject ToastPrefab; public List<ToastHandler> ToastList = new List<ToastHandler>(); private float Timer=0; public float Interval; public Transform Parent; //通过这里来创建Toast预制体 public void CreatToast(string str) { var Toa = Instantiate(ToastPrefab, Parent.transform.position, Parent.transform.rotation, Parent.transform); var comp = Toa.GetComponent<ToastHandler>(); ToastList.Insert(0, comp); comp.InitToast(str,()=> { ToastList.Remove(comp); }); Timer = 0; //有新的Toast出现,之前的Toast向上移动 ToastMove(0.2f); } public void ToastMove(float speed) { for (int i = 0; i < ToastList.Count; i++) { ToastList[i].Move(speed,i+1); } } }
效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】