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 = ;
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的更多相关文章
- Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)
背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...
- Unity3D UGUI之ScrollView弹簧效果
unity3d版本5.3.2p4 UGUI中ScrollView包含Viewport(Content) ScrollView包含脚本.其Movement Type一共3个选项.Elastic就是弹簧效 ...
- Unity3D UGUI下拉菜单/Dropdown组件用法、总结
Unity3D中UGUI实现下拉菜单 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Unity3d uGUI适配
Cavas: 1.Render Model设置为:Screen Space- Camera.如果想在UI前面加特效我可以在创建一个摄像机(UIForward)深度大于这个UICamera就行了. 2. ...
- Unity3D UGUI学习系列索引(暂未完成)
U3D UGUI学习1 - 层级环境 U3D UGUI学习2 - Canvas U3D UGUI学习3 - RectTransform U3D UGUI学习4 - Text U3D UGUI学习5 - ...
- Unity3D UGUI窗口拖拽
在开发UGUI时 我们时常需要做一个窗口拖拽的功能 先上代码 using UnityEngine; using UnityEngine.EventSystems; public class DragW ...
- Unity3D UGUI强制刷新Layout(布局)组件
UGUI的Layout布局组件确实节省了我们很多代码 如果不使用Layout组件 那么光在计算UI的布局上就要花费很大的功夫 特别是动态生成其组件的时候 当然,Layout组件在大多数时候是非常好用的 ...
- Unity3D — — UGUI之简易背包
Uinity版本:2017.3 最近在学Siki老师的<黑暗之光RPG>教程,由于教程内用的是NGUI实现,而笔者本人用的是UGUI,所以在这里稍微写一下自己的实现思路(大致上和NGUI一 ...
- Unity3d — — UGUI之Box Collider自适应大小
NGUI下给Sprite/image添加collider后能自适应大小,但是在UGUI下Collider是默认在(0,0)位置,size为0 因此写了个简单的脚本,效果如下(最后附代码) 1.如下图添 ...
随机推荐
- windows服务器安全管理工具——IISCrypto
官方网站地址:https://www.nartac.com/Products/IISCrypto/ 下载地址:https://www.nartac.com/Products/IISCrypto/Dow ...
- sql server中如何修改视图中的数据?
sql server中如何修改视图中的数据? 我做个测试,视图的数据有标记字段时,如果是这种方式(0 as FlagState),是无法修改的 --创建视图语句 --- create view V_E ...
- C++结束进程 并能显示其父进程
声明:有些网友有可能在CSDN博客上看到过相同的文章,因为本人有两个账号...请不要误会,均为原创 这个程序功能强大哦~~ #include <cstdio> #include <w ...
- 【重磅】Spring Boot 2.0权威发布
新版本特性 新版本值得关注的亮点有哪些: 基于 Java 8,支持 Java 9 也就是说Spring Boot2.0的最低版本要求为JDK8,据了解国内大部分的互联网公司系统都还跑在JDK1.6/7 ...
- python中一些传参事情
#一个参数的传参 def hello(a): print(a+'王彦军你好')hello('hello')''' #2个参数的 def ab(a,b): print(a+'你好') ...
- from jobscrawler_qianchengwuyou.items import JobscrawlerQianchengwuyouItem
-- coding: utf-8 -- import scrapy from jobscrawler_qianchengwuyou.items import JobscrawlerQianchengw ...
- vim常用指令
命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...
- linux ubuntu 安装后没有root密码
终端中输入:sudo passwd root 此时重新设置原登录用户的密码. 设置成功后在终端继续输入: su root 则出现#号,原用户名得到root权限.此时可以进行超级用户操作.
- css书写规范以及如何写出赏心悦目的代码
css书写规范: 1. 编码统一为utf-8;2. 协作开发及分工: i根据各个模块, 同时根据页面相似程序, 事先写好大体框架文件,同时根据页面相似程序,事先写好大体框架文件.共用css文件base ...
- impala和kudu使用的小细节
七堇年:我们要有最朴素的生活与最遥远的梦想 . 即使明日天寒地冻,路远马亡. 加油! 之前入门的小错误总结,建表都会出错,真的好尴尬 还是要做好笔记 第一个错误: error:AnalysisEx ...