要实现通知中心功能,首先要创建一个游戏物体,在上面挂载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的通知?的更多相关文章

  1. Unity3D开发Windows Store应用程序 注意事项

    原地址:http://blog.csdn.net/jbjwpzyl3611421/article/details/12704491 针对最近在移植window store项目中遇到的问题,我整理了官方 ...

  2. PowerShell将Windows store应用程序安装为开发者模式

    原文: PowerShell将Windows store应用程序安装为开发者模式 在本地部署Windows 商店应用程序时,我们会遇到Add-AppDevPackage.ps1脚本,这个脚本和所在安装 ...

  3. Unity干中学——如何实现游戏截图?

    using UnityEngine; using System.Collections; using System.IO; public class ScreenShot : MonoBehaviou ...

  4. 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 ...

  5. 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 ...

  6. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  7. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  8. 用unity4.3发布WINDOWS STORE APP应用的方法

    http://www.cnblogs.com/suxsho/ 原创,转载请声明 ============================================================ ...

  9. kiosk-mode,免密码登陆, sideload Windows Store apps 等

    MVVM带来的性能问题及其解决方案  MVVM 和语言性能提示:https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/mt628050. ...

随机推荐

  1. Windows Live Writer的Markdown插件

    我新写了一个Windows Live Writer的Markdown插件,代码放在了github上. 介绍 这个项目是一个Windows Live Writer的Markdown插件.有了这个插件,你 ...

  2. LCA在线算法ST算法

    求LCA(近期公共祖先)的算法有好多,按在线和离线分为在线算法和离线算法. 离线算法有基于搜索的Tarjan算法较优,而在线算法则是基于dp的ST算法较优. 首先说一下ST算法. 这个算法是基于RMQ ...

  3. HDU 1025 Constructing Roads In JGShining&#39;s Kingdom (DP)

    Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which ...

  4. Redhat 官方Performance_Tuning_Guide

    https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Gui ...

  5. iOS中__block 关键字的底层实现原理

    在 <iOS面试题集锦(附答案)> 中有这样一道题目: 在block内如何修改block外部变量?(38题)答案如下: 默认情况下,在block中访问的外部变量是复制过去的,即:写操作不对 ...

  6. xslt语法之---基础语法

    1. XSLT常用元素: 1.1 <xsl:template>:创建模板     Match属性的作用是使模板和XML元素相关联 <xsl:template match=" ...

  7. css选择器优化

    css选择器优化@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@impor ...

  8. nodejs 按行读取 readline

                fs.mkdirSync('./yotmp');      }                  log(out);               input: file,    ...

  9. LiLei&HanMeiMei的隐式马尔可夫爱情

    一篇非常棒的隐马尔可夫入门文章...推荐! from: http://staffwww.dcs.shef.ac.uk/people/W.Liu/hmm.html

  10. new Integer(1)和Integer.valueOf(1)的区别

    java.lang包中的Integer类是我们比较常用的类,比如以下代码: Integer a=new Integer(1) Integer a=Integer.valueOf(1); 两个都是得到一 ...