Unity计时器(二)

来源:互联网 发布:淘宝网官方下载 编辑:程序博客网 时间:2024/06/06 03:46

这个计时器为了实现状态的切换写的,类似我们斗地主的时候出现很多种状态,每个状态都需要一个计时器,例如:准备,抢地主,翻倍等,话也不多说,直接上代码,这里因为代码简单,所以写个实例加深印象:

public enum DoudizhuGameStage
{
    Start,
    Qiangzhuang,
    Beishu,
    Result,
    Over
}

/// <summary>
/// 时间倒计时数值到0后的执行的事件
/// </summary>
public delegate void ResultRedution();
public class Timers : MonoSingleton<Timers>
{
    /// <summary>
    /// 是否开始
    /// </summary>
    public bool Isstar;
    /// <summary>
    /// 记录计时器的文本
    /// </summary>
    Text StarTimer_text;
    /// <summary>
    /// 准备按钮
    /// </summary>
    Button Star_btn;
    /// <summary>
    /// 是否结束
    /// </summary>
    bool isover;
    /// <summary>
    /// 开始时间
    /// </summary>
    float m_Times;
    /// <summary>
    /// 结束时间
    /// </summary>
    float TimeCD;
    /// <summary>
    /// 无参无返回委托
    /// </summary>
    public event ResultRedution m_Redution;
    protected override void Awake()
    {
        base.Awake();
    }
    private void Update()
    {
        if (Isstar)
        {
            m_Times += Time.deltaTime;
            ReshTimer();
            if (m_Times > TimeCD)
            {
                isover = true;
            }
        }
        if (isover)
        {
            isover = false;
            Isstar = false;
            m_Times = 0;
            if (m_Redution != null)
            {
                m_Redution();
                
            }
        }
    }
    /// <summary>
    /// 获取显示时间的具体数值的Text
    /// </summary>
    /// <param name="m_trans"></param>
    public void GetText(Transform m_trans)
    {
        StarTimer_text = m_trans.GetComponent<Text>();
    }
    /// <summary>
    /// 显示倒计时的数值
    /// </summary>
    void ReshTimer()
    {
        StarTimer_text.text = (-(int)(m_Times - TimeCD)).ToString();
    }

    /// <summary>
    /// 开启各个状态的计时器并设置时间
    /// </summary>
    /// <param name="_stage"></param>
    /// <param name="_result"></param>
    public void StarTimers(DoudizhuGameStage _stage, ResultRedution _result)
    {
        Isstar = true;
        m_Times = 0;
        isover = false;
        m_Redution = _result;
        switch (_stage)
        {
            case DoudizhuGameStage.Start:
                TimeCD = 6f;
                break;
            case DoudizhuGameStage.Qiangzhuang:
                TimeCD = 8f;
                break;
            case DoudizhuGameStage.Beishu:
                TimeCD = 3f;
                break;
            case DoudizhuGameStage.Result:
                TimeCD = 8f;
                break;
            case DoudizhuGameStage.Over:
                isover = true;
                break;
            default:
                isover = true;
                break;
        }
    }

原创粉丝点击