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.如下图添 ...
随机推荐
- 模仿也是提高,纯css小技巧实现头部进度条
刚开始的时候我也觉得不可能,但是就是这么神奇,总有大神给你意想不到的惊喜. 快来感受一下把.(仔细看看头部黄色条的变化) 思考一下啊,怎么出现的那,其实作者使用了一点小技巧,那就是背景色渐变和遮挡产生 ...
- 微信浏览器无法下载APK文件的解决方案
大家是不是经常会遇到微信内点击链接或扫描二维码无法打开指定网页的问题?只要你使用微信转发分享,相信你就一定会遇到,那么打不开的原因很简单了,就是被微信拦截了.这个问题我们只需要实现从微信内直接跳出到外 ...
- JavaScript 进制转换
//十进制转其他 var x=111; alert(x.toString(8)); alert(x.toString(16)); //其他转十进制 var x='112'; alert(parseIn ...
- node遍历文件夹并读取文件内容
var fs = require('fs'); var path = require('path');//解析需要遍历的文件夹 var filePath = path.resolve('./dist' ...
- 二进制转base64
一. 以fetch的获取数据 1. response(后台返回): const buffer = response.arrayBuffer(),将二级制转成arrayBuffer类型 2. buffe ...
- Android最火热修复实战
Sophix官网文档地址 https://help.aliyun.com/document_detail/53240.html 快速接入 项目build.gradle的repositories节点下添 ...
- [NOIP2014D2]
T1 Problem 洛谷 Solution 枚举那个点的位置,再O(n)扫一遍求出覆盖的公共场合的数量... 所以时间复杂度为O(128 * 128 * n) Code #include<cm ...
- Django部署以及整合celery
前言 Djngo部署的结构一般都是nginx+uwsgi+python web 一.新建一个Djang项目并合并celery 项目名随便打的..命名规范驼峰啥的别和我扯犊子哈 跑一下,然后我们就有一个 ...
- Ubuntu中搭建强化学习平台(使用anaconda管理Python并安装tensorflow、opencv)
首先介绍一下anaconda,annoconda是一个开源的Python发行版本,里面集成了python.conda等多个科学包及其依赖项.安装完成之后,就可以使用conda版本管理器进行管理,可以让 ...
- webix的Form绑定支持数组Array
绑定的原理 form.setValues:把树形对象,压平展开成一维的.比如: var data = { id: 11, name: { first: 'alex', last: 'wu' } }; ...