自己写的Toast

using UnityEngine;
using System.Collections.Generic;
using System;
using System.Text;

/// <summary>
/// 用于传输数据
/// </summary>
public class osToastUIData
{
    public string Notice;
    public float Duration;
    public Vector3 TweenStartPos;
    public Vector3 TweenTargetPos;
    public Color TextColor;

    public osToastUIData()
    {
        Duration = 1f;
        TweenStartPos = new Vector3(0, osNguiRoot.Instance.Height * 0.1f, 0);
        TweenTargetPos = new Vector3(0, osNguiRoot.Instance.Height * 0.25f);
        TextColor = Color.white;
    }
}
public class osFloatNotice : MonoBehaviour
{
    public float TimespanGap = 0.3f; //  上一条与下一条的显示时间间隔
    public GameObject ItemPrefab;  //   ToastGameObject的预制体
    public Transform Container;
    public List<GameObject> m_ItemList;

    private const float m_WaiteToHideGap = 5f;  //  播放完最后一个Toast 5 秒后隐藏该物体

    private Queue<osToastUIData> m_ToastUIDatas = new Queue<osToastUIData>();
    private float m_lastShowTime = 0f;
    private float m_currentShowTime = 0f;
    private bool m_IsBeginToHide = false;


    public void Show(osToastUIData toastUIData)
    {
        m_ToastUIDatas.Enqueue(toastUIData);
        gameObject.SetActive(true);
        m_IsBeginToHide = false;
    }

    private void SetData(osToastUIData toastUIData)
    {
        GameObject noticeGameObject = GetAvailableItem();
        gameObject.SetActive(true);
        string textNotice;
        if (toastUIData.TextColor != Color.white)
        {
            string color = CoverColorToX2(toastUIData.TextColor);
            textNotice = string.Format("[{0}]{1}[-]", color, toastUIData.Notice);
        }
        else
            textNotice = toastUIData.Notice;

        osFloatNoticeItem noticeitem = noticeGameObject.GetComponent<osFloatNoticeItem>();
        noticeitem.Show(textNotice, toastUIData.Duration, toastUIData.TweenStartPos, toastUIData.TweenTargetPos);
        m_lastShowTime = Time.realtimeSinceStartup;
    }

    protected void Update()
    {
        if (m_IsBeginToHide && Time.realtimeSinceStartup - m_lastShowTime > m_WaiteToHideGap)
        {
            gameObject.SetActive(false);
            return;
        }

        if (m_ToastUIDatas.Count < 1 
         || GetAvailableItem() == null 
         || !IsTimeToShow())
            return;

        osToastUIData currentToastData = m_ToastUIDatas.Dequeue();
        SetData(currentToastData);

        if (m_ToastUIDatas.Count == 0)
            m_IsBeginToHide = true;
    }
    private string CoverColorToX2(Color color)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append(((int)color.r * 255).ToString("X2"));
        sb.Append(((int)color.g * 255).ToString("X2"));
        sb.Append(((int)color.b * 255).ToString("X2"));
        //sb.Append(color.a.ToString("X2"));
        return sb.ToString();
    }

    private bool IsTimeToShow()
    {
        m_currentShowTime = Time.realtimeSinceStartup;
        return m_currentShowTime - m_lastShowTime > TimespanGap;
    }

    //  这里可以扩展  指定同时显示的最多的Toasts数目
    private GameObject GetAvailableItem()
    {
        GameObject floatGameObject = null;

        //if (m_ItemList == null)
        //  m_ItemList = new List<GameObject>();

        //if(m_ItemList.Count == 0)
        //{
        //  floatGameObject = CreateNewFloatNoticeGameObject();
        //  m_ItemList.Add(floatGameObject);
        //}
        //else
        //{
        for (int ListIndex = 0; ListIndex < m_ItemList.Count; ListIndex++)
        {
            GameObject itemInList = m_ItemList[ListIndex];
            osFloatNoticeItem floatNoticeItem = itemInList.GetComponent<osFloatNoticeItem>();
            if (!floatNoticeItem.IsPlaying())
            {
                return itemInList;
            }
        }
        //if(floatGameObject == null || m_ItemList.Count < 5)
        //{
        //  floatGameObject = CreateNewFloatNoticeGameObject();
        //  m_ItemList.Add(floatGameObject);
        //}
        //}
        return floatGameObject;
    }

    private GameObject CreateNewFloatNoticeGameObject()
    {
        GameObject floatNoticeGameObject = Instantiate(ItemPrefab);
        mfUtility.AttachAndReset(floatNoticeGameObject.transform, Container);
        return floatNoticeGameObject;
    }
}
using UnityEngine;
using System.Collections;
using System;

public class osFloatNoticeItem : MonoBehaviour
{
    private bool m_IsPlaying = false;
    private bool m_IsInitialized = false;
    private UILabel m_FloatNotice;
    private TweenPosition m_TweenPosition;

    public void Show(string notice, float duration, Vector3 startPos, Vector3 targetPos)
    {
        if (!m_IsInitialized)
            Initialize();

        gameObject.transform.localPosition = startPos;
        gameObject.SetActive(true);
        m_FloatNotice.text = notice;

        m_TweenPosition = TweenPosition.Begin(gameObject, duration, targetPos);
        m_TweenPosition.onFinished = OnAnimationFinished;
        m_IsPlaying = true;
    }

    public bool IsPlaying()
    {
        return m_IsPlaying;
    }

    private void Initialize()
    {
        if (m_IsInitialized == true)
            return;
        m_FloatNotice = mfUtility.GetComponentByPath<UILabel>(transform, "Label");
        m_TweenPosition = GetComponent<TweenPosition>();
        m_IsInitialized = true;
    }

    private void OnAnimationFinished(UITweener tween)
    {
        gameObject.SetActive(false);
        m_IsPlaying = false;
    }

    //protected void OnDisable()
    //{
    //  m_TweenPosition.onFinished -= OnAnimationFinished;
    //}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值