Unity干中学——如何实现类似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。最终结果如下图所示:

Unity干中学——如何实现类似Windows Store 应用程序和Android Toast的通知?

      

      下面写一个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, "成功截图并保存")。

      

你可能感兴趣的:(android)