项目中有些信息需要以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 = ;
int ToastHeight = ;
if (StrLenth > )
{
ToastHeight = (StrLenth / )+;
ToastWidth = ; }
else {
ToastWidth = StrLenth;
} image.rectTransform.sizeDelta = new Vector2(* ToastWidth + , * ToastHeight + );
FadeOut(callback);
} public void FadeOut(System.Action callback) {
image.DOFade(,).OnComplete(()=> {
callback.Invoke();
Destroy(gameObject);
});
text.DOFade(,);
} //堆叠向上移动
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=;
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(, comp);
comp.InitToast(str,()=> {
ToastList.Remove(comp);
}); Timer = ; //有新的Toast出现,之前的Toast向上移动
ToastMove(0.2f);
} public void ToastMove(float speed) {
for (int i = ; i < ToastList.Count; i++)
{
ToastList[i].Move(speed,i+);
}
}
}

效果如下:

Unity3D UGUI实现Toast的更多相关文章

  1. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  2. Unity3D UGUI之ScrollView弹簧效果

    unity3d版本5.3.2p4 UGUI中ScrollView包含Viewport(Content) ScrollView包含脚本.其Movement Type一共3个选项.Elastic就是弹簧效 ...

  3. Unity3D UGUI下拉菜单/Dropdown组件用法、总结

    Unity3D中UGUI实现下拉菜单 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  4. Unity3d uGUI适配

    Cavas: 1.Render Model设置为:Screen Space- Camera.如果想在UI前面加特效我可以在创建一个摄像机(UIForward)深度大于这个UICamera就行了. 2. ...

  5. Unity3D UGUI学习系列索引(暂未完成)

    U3D UGUI学习1 - 层级环境 U3D UGUI学习2 - Canvas U3D UGUI学习3 - RectTransform U3D UGUI学习4 - Text U3D UGUI学习5 - ...

  6. Unity3D UGUI窗口拖拽

    在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...

  7. Unity3D UGUI强制刷新Layout(布局)组件

    UGUI的Layout布局组件确实节省了我们很多代码 如果不使用Layout组件 那么光在计算UI的布局上就要花费很大的功夫 特别是动态生成其组件的时候 当然,Layout组件在大多数时候是非常好用的 ...

  8. Unity3D — — UGUI之简易背包

    Uinity版本:2017.3 最近在学Siki老师的<黑暗之光RPG>教程,由于教程内用的是NGUI实现,而笔者本人用的是UGUI,所以在这里稍微写一下自己的实现思路(大致上和NGUI一 ...

  9. Unity3d — — UGUI之Box Collider自适应大小

    NGUI下给Sprite/image添加collider后能自适应大小,但是在UGUI下Collider是默认在(0,0)位置,size为0 因此写了个简单的脚本,效果如下(最后附代码) 1.如下图添 ...

随机推荐

  1. windows系统,boost编译安装

    windows系统,boost编译安装vs2017 1.下载https://www.boost.org/users/download/下载windows对应的zip包解压 2.配置vc环境变量我的是: ...

  2. 跟随我在oracle学习php(15)

    开发环境 独立开发环境:组成 Windows/Linux php Apache MySQL 集成开发环境:phpstudy wamp xammp 关系数据库: SQL: Struct Query La ...

  3. 初次接触Java

    今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...

  4. oracle权限列表

    alter any cluster 修改任意簇的权限 alter any index 修改任意索引的权限 alter any role 修改任意角色的权限 alter any sequence 修改任 ...

  5. java求0~100的质数(素数)

    质数的概念: 简单的来说就是一个数从2开始取模到(求余数)自身的值,如果取模后余数一直不等于0那么这个数就是质数(素数). 如 7     7%2    7%3    7%4    7%5   7%6 ...

  6. windows版influxDB安装与配置

    一.下载链接https://portal.influxdata.com/downloads,选windows版 二.解压到安装盘,目录如下 三.修改conf文件,代码如下,直接复制粘贴(1.4.2版本 ...

  7. matplotlib图表组成元素

    一.函数 1.plot()    --   展示变量的趋势与变化 用法: plt.plot(x,y,ls="-",lw=2,label="plot figure" ...

  8. MySQL数据库--思维导图

    MySQL数据库--思维导图

  9. mybatis中<foreach>标签的使用

    标签太多,记一下不是特别常用的标签~留着脑袋瓜不机灵的时候看! <foreach>标签  该标签的作用是遍历集合类型的条件 <select id="countByUserL ...

  10. 【SoftwareTesting】Homework2

    For the Program1, For Question1: The fault is that in the loop condition, ' i ' should be not less t ...