简述
在Unity开发中,常常会用到计时器功能。偶有所感,决定记录下来。
详细代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 定时器脚本
/// </summary>
public class LTimer : MonoBehaviour
{
private float duration;
private Action onEnd;
private Action onUpdate;
private bool isPause;
/// <summary>
/// 创建一个拥有onEnd事件的定时器
/// </summary>
/// <param name="_go">依附的GameObject</param>
/// <param name="duration">定时器的时间</param>
/// <param name="_onend">onEnd事件</param>
/// <returns></returns>
public static LTimer Begin(GameObject _go, float duration, Action _onend)
{
LTimer lt = _go.AddComponent<LTimer>();
lt.Sample(duration, null, _onend);
return lt;
}
/// <summary>
/// 创建一个拥有onUpdate、onEnd事件的定时器
/// </summary>
/// <param name="_go">依附的GameObject</param>
/// <param name="duration">定时器的时间</param>
/// <param name="_onupdate">onUpdate事件</param>
/// <param name="_onend">onEnd事件</param>
/// <returns></returns>
public static LTimer Begin(GameObject _go, float duration, Action _onupdate, Action _onend)
{
LTimer lt = _go.AddComponent<LTimer>();
lt.Sample(duration, _onupdate, _onend);
return lt;
}
/// <summary>
/// 暂停该定时器
/// </summary>
public void Pause()
{
isPause = true;
}
/// <summary>
/// 定时器恢复计时
/// </summary>
public void Resume()
{
isPause = false;
}
/// <summary>
/// 取消定时器
/// </summary>
public void Cancel()
{
isPause = true;
Destroy(this);
}
void Sample(float _duration, Action _onupdate, Action _onend)
{
duration = _duration;
onUpdate = _onupdate;
onEnd = _onend;
isPause = false;
}
void Update()
{
if (isPause)
return;
duration -= Time.deltaTime;
if (onUpdate != null)
onUpdate();
if (duration < 0)
{
if (onEnd != null)
onEnd();
isPause = true;
Destroy(this);
}
}
}