Unity干中学——如何实现类似Windows Store 应用程序和Android Toast的通知?
要实现通知中心功能,首先要创建一个游戏物体,在上面挂载GUITeture和GUIText脚本。注意GUITexture和GUIText脚本的顺序,GUITexture在前,GUIText在后,否则GUITexture会将GUIText遮挡住。
接着设置Position属性,讲Position的X属性设置为1.2,Y设置为0.9,这样就将物体设置为屏幕之外靠近右上角的位置。
下面给物体挂载脚本,实现通知功能。
using UnityEngine;
using System.Collections; public class TestTest : MonoBehaviour
{
private GUITexture guiTexture;
private GUIText guiText;
private float x;
private bool sholdMove = true;
private bool shouldFadeOut = true;
public float stopMoveTime = ;
public bool shouldPlay = true;
private float winStoreNotificationCenterStayTime = 3f;
private float androidToastStayTime = 0.5f;
public enum NotificationStyle { AndroidToast, WinStoreNotificationCenter }; public NotificationStyle currentNotificationStyle = NotificationStyle.WinStoreNotificationCenter;
void Start()
{
guiTexture = GetComponent<GUITexture>();
guiText = GetComponent<GUIText>(); audio.PlayDelayed(0.5f); switch (currentNotificationStyle)
{
case NotificationStyle.AndroidToast: Vector3 pos = guiTexture.gameObject.transform.position;
pos.x = 0.5f - (guiTexture.pixelInset.size.x / Screen.width) * 0.5f;
pos.y = 0.5f + (guiTexture.pixelInset.size.y / Screen.height) * 0.5f;
guiTexture.gameObject.transform.position = pos;
guiText.alignment = TextAlignment.Center; shouldFadeOut = true; break; case NotificationStyle.WinStoreNotificationCenter: x = - (guiTexture.pixelInset.size.x / Screen.width) - 0.02f;
shouldFadeOut = false;
break;
default: break;
} } // Update is called once per frame
void Update()
{
switch (currentNotificationStyle)
{
case NotificationStyle.AndroidToast: if (stopMoveTime != && stopMoveTime + androidToastStayTime <= Time.time)
{
shouldFadeOut = true;
} if (shouldFadeOut)
{
Color temp = guiTexture.color;
temp.a -= Time.deltaTime / 2f;
guiTexture.color = temp;
if (guiTexture.color.a <= )
{
shouldFadeOut = false;
Destroy(this.gameObject);
}
} break;
case NotificationStyle.WinStoreNotificationCenter: if (sholdMove)
{
guiTexture.transform.Translate(new Vector3(-0.1f, , ) * Time.deltaTime * );
if (guiTexture.transform.position.x <= x)
{
sholdMove = false;
stopMoveTime = Time.time;
}
} if (stopMoveTime != && stopMoveTime + winStoreNotificationCenterStayTime <= Time.time)
{
shouldFadeOut = true;
} if (shouldFadeOut)
{
Color temp = guiTexture.color;
temp.a -= Time.deltaTime;
guiTexture.color = temp;
if (guiTexture.color.a <= )
{
shouldFadeOut = false;
Destroy(this.gameObject);
}
} break; default:
break;
}
}
}
然后给游戏物体加上Audio Source组件,由于播放消息声音。接下来将物体命名为Notification,做成Prefab。最终结果如下图所示:

下面写一个Notification脚本,用于统一管理通知。
using UnityEngine;
using System.Collections; public class NotificationCenter : MonoBehaviour
{
public static NotificationCenter Instance; public GameObject notificationPrefab;
void Awake()
{
Instance = this;
} public void Add(TestTest.NotificationStyle notificationStyle, string guiTextContent)
{
GameObject go = Instantiate(notificationPrefab) as GameObject;
go.GetComponent<TestTest>().currentNotificationStyle = notificationStyle;
go.guiText.text = guiTextContent;
}
}
这样,当我们使用的时候直接调用NotificationCenter.Instance. Add(TestTest.NotificationStyle notificationStyle, string guiTextContent)
方法就行了。其中notificationStyle参数表示消息现实的风格(WinStore样式或Android Toast样式),guiTextContent表示GUIText组件现实的文本,也就是消息内容。
接着我的上一篇文章,要想显示截图保存成功的消息,只需要这样调用NotificationCenter.Instance. Add(TestTest.NotificationStyle.WinStoreNotificationCenter, "成功截图并保存")。
Unity干中学——如何实现类似Windows Store 应用程序和Android Toast的通知?的更多相关文章
- Unity3D开发Windows Store应用程序 注意事项
原地址:http://blog.csdn.net/jbjwpzyl3611421/article/details/12704491 针对最近在移植window store项目中遇到的问题,我整理了官方 ...
- PowerShell将Windows store应用程序安装为开发者模式
原文: PowerShell将Windows store应用程序安装为开发者模式 在本地部署Windows 商店应用程序时,我们会遇到Add-AppDevPackage.ps1脚本,这个脚本和所在安装 ...
- Unity干中学——如何实现游戏截图?
using UnityEngine; using System.Collections; using System.IO; public class ScreenShot : MonoBehaviou ...
- Unity Game Starter Kit for Windows Store and Windows Phone Store games
原地址:http://digitalerr0r.wordpress.com/2013/09/30/unity-game-starter-kit-for-windows-store-and-window ...
- Unity for Windows: II – Publishing Unity games to Windows Store
原地址:http://digitalerr0r.wordpress.com/2013/08/27/unity-for-windows-ii-publishing-to-windows-8/ Windo ...
- Windows Store App 过渡动画
Windows Store App 过渡动画 在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...
- 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)
这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...
- 用unity4.3发布WINDOWS STORE APP应用的方法
http://www.cnblogs.com/suxsho/ 原创,转载请声明 ============================================================ ...
- kiosk-mode,免密码登陆, sideload Windows Store apps 等
MVVM带来的性能问题及其解决方案 MVVM 和语言性能提示:https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/mt628050. ...
随机推荐
- hdu5127 Dogs' Candies CDQ分治 动态凸包
传送门 题意 有三种操作 加入一个二元组\((x,y)\) 删除一个二元组\((x,y)\) 给出一个二元组\((a,b)\),问\(ax+by\)的最大值 题解 \(z=ax+by \Rightar ...
- xen credit scheduler and policy
最近在研究xen的vcpu 调度和cpu qos策略,现在默认的scheduler是credit, 对应的代码是sched_credit.c xen支持好几种控制策略,效果最好的当选pin, 灵活性最 ...
- request和response的中文乱码问题
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- eclipse 常见问题及解决
1. Target runtime Apache Tomcat v6.0 is not defined.错误解决方法 原文:http://blog.csdn.net/xw13106209/articl ...
- Visual Studio 调试技巧 (二)-- 为中断设置条件
今天尽是干货.我们来讨论如何为中断设置条件吧. 就像习大大讲的精确扶贫一样,如果我们能很精确地,仅在需要的时候把断点命中,以查看这个时候的程序数据,我们就能显著地提高 Debug 的效率.为断点设置条 ...
- Java——(三)Collection之Set集合、HashSet类
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.Set集合 Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中, ...
- Android开发报错系列(一),java.lang.NullPointerException,at android.widget.ListView.setupChild
问题描述:运行代码是报空指针错误,java.lang.NullPointerException,at Android.widget.ListView.setupChild 问题定位:listview控 ...
- 本地代码git到github上
本地代码git到github上 对于个程序员来说,不写自己的博客,没有自己的作品集没有Github就不算好的程序员!咳咳~ 开个玩笑.对于我个人来说,要做个程序员,就要有自己的作品集和技术博客(我说是 ...
- python之enumerate枚举 第二篇(六):enumerate枚举
[Python之旅]第二篇(六):enumerate枚举 python enumerate枚举 摘要: 1.普通情况下打印列表中索引号及其对应元素 使用下面的循环: 1 2 3 4 5 6 ...
- Android之提交数据到服务端方法简单封装
在Android应用中,除了单机版的应用,其余的应用免不了需要频繁地与服务端进行数据交互,如果每一种方法都独立写一段代码,那会造成代码大量重复,冗余,这不是我们所希望的,所以我们可以对其进行一些封装, ...