如何实现类似Windows Store 应用程序和Android Toast的通知?

要实现通知中心功能,首先要创建一个游戏物体,在上面挂载GUITeture和GUIText脚本。注意GUITexture和GUIText脚本的顺序,GUITexture在前,GUIText在后,否则GUITexture会将GUIText遮挡住。

     接着设置Position属性,讲Position的X属性设置为1.2,Y设置为0.9,这样就将物体设置为屏幕之外靠近右上角的位置。

     下面给物体挂载脚本,实现通知功能。

      

复制代码
  1 using UnityEngine;
  2 using System.Collections;
  3 
  4 public class TestTest : MonoBehaviour
  5 {
  6     private GUITexture guiTexture;
  7     private GUIText guiText;
  8     private float x;
  9     private bool sholdMove = true;
 10     private bool shouldFadeOut = true;
 11     public float stopMoveTime = 0;
 12     public bool shouldPlay = true;
 13     private float winStoreNotificationCenterStayTime = 3f;
 14     private float androidToastStayTime = 0.5f;
 15     public enum NotificationStyle { AndroidToast, WinStoreNotificationCenter };
 16 
 17     public NotificationStyle currentNotificationStyle = NotificationStyle.WinStoreNotificationCenter;
 18     void Start()
 19     {
 20         guiTexture = GetComponent<GUITexture>();
 21         guiText = GetComponent<GUIText>();
 22 
 23         audio.PlayDelayed(0.5f);
 24 
 25         switch (currentNotificationStyle)
 26         {
 27             case NotificationStyle.AndroidToast:
 28 
 29                 Vector3 pos = guiTexture.gameObject.transform.position;
 30                 pos.x = 0.5f - (guiTexture.pixelInset.size.x / Screen.width) * 0.5f;
 31                 pos.y = 0.5f + (guiTexture.pixelInset.size.y / Screen.height) * 0.5f;
 32                 guiTexture.gameObject.transform.position = pos;
 33                 guiText.alignment = TextAlignment.Center;
 34 
 35                 shouldFadeOut = true;
 36 
 37                 break;
 38 
 39             case NotificationStyle.WinStoreNotificationCenter:
 40 
 41                 x = 1 - (guiTexture.pixelInset.size.x / Screen.width) - 0.02f;
 42                 shouldFadeOut = false;
 43                 break;
 44             default:
 45 
 46                 break;
 47         }
 48 
 49     }
 50 
 51     // Update is called once per frame
 52     void Update()
 53     {
 54         switch (currentNotificationStyle)
 55         {
 56             case NotificationStyle.AndroidToast:
 57 
 58                 if (stopMoveTime != 0 && stopMoveTime + androidToastStayTime <= Time.time)
 59                 {
 60                     shouldFadeOut = true;
 61                 }
 62 
 63                 if (shouldFadeOut)
 64                 {
 65                     Color temp = guiTexture.color;
 66                     temp.a -= Time.deltaTime / 2f;
 67                     guiTexture.color = temp;
 68                     if (guiTexture.color.a <= 0)
 69                     {
 70                         shouldFadeOut = false;
 71                         Destroy(this.gameObject);
 72                     }
 73                 }
 74 
 75                 break;
 76             case NotificationStyle.WinStoreNotificationCenter:
 77 
 78                 if (sholdMove)
 79                 {
 80                     guiTexture.transform.Translate(new Vector3(-0.1f, 0, 0) * Time.deltaTime * 2);
 81                     if (guiTexture.transform.position.x <= x)
 82                     {
 83                         sholdMove = false;
 84                         stopMoveTime = Time.time;
 85                     }
 86                 }
 87 
 88                 if (stopMoveTime != 0 && stopMoveTime + winStoreNotificationCenterStayTime <= Time.time)
 89                 {
 90                     shouldFadeOut = true;
 91                 }
 92 
 93                 if (shouldFadeOut)
 94                 {
 95                     Color temp = guiTexture.color;
 96                     temp.a -= Time.deltaTime;
 97                     guiTexture.color = temp;
 98                     if (guiTexture.color.a <= 0)
 99                     {
100                         shouldFadeOut = false;
101                         Destroy(this.gameObject);
102                     }
103                 }
104 
105                 break;
106 
107             default:
108                 break;
109         }
110     }
111 }
复制代码

      然后给游戏物体加上Audio Source组件,由于播放消息声音。接下来将物体命名为Notification,做成Prefab。最终结果如下图所示:

      

      下面写一个Notification脚本,用于统一管理通知。

复制代码
 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class NotificationCenter : MonoBehaviour
 5 {
 6     public static NotificationCenter Instance;
 7 
 8     public GameObject notificationPrefab;
 9     void Awake()
10     {
11         Instance = this;
12     }
13 
14     public void Add(TestTest.NotificationStyle notificationStyle, string guiTextContent)
15     {
16         GameObject go = Instantiate(notificationPrefab) as GameObject;
17         go.GetComponent<TestTest>().currentNotificationStyle = notificationStyle;
18         go.guiText.text = guiTextContent;
19     }
20 }
复制代码

      这样,当我们使用的时候直接调用NotificationCenter.Instance. Add(TestTest.NotificationStyle notificationStyle, string guiTextContent)

方法就行了。其中notificationStyle参数表示消息现实的风格(WinStore样式或Android Toast样式),guiTextContent表示GUIText组件现实的文本,也就是消息内容。

      接着我的上一篇文章,要想显示截图保存成功的消息,只需要这样调用NotificationCenter.Instance. Add(TestTest.NotificationStyle.WinStoreNotificationCenter, "成功截图并保存")。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值