using UnityEngine;
using System.Collections;

public class Timer : MonoBehaviour
{
    public float duration = 1.0f; // 定时器持续时间
    public bool isLooping = false; // 是否循环
    public bool isPaused = false; // 是否暂停计时器

    private float currentDuration = 0.0f; // 当前持续时间

    // 定时器结束事件
    public delegate void OnTimerFinishedDelegate();
    public event OnTimerFinishedDelegate OnTimerFinished;

    // 每帧更新计时器
    void Update()
    {
        if (isPaused) return;

        currentDuration += Time.deltaTime;

        if (currentDuration >= duration)
        {
            if (OnTimerFinished != null) OnTimerFinished();

            if (isLooping) currentDuration -= duration;
            else enabled = false;
        }
    }

    // 重置计时器
    public void ResetTimer()
    {
        currentDuration = 0.0f;
        enabled = true;
    }

    // 暂停计时器
    public void PauseTimer()
    {
        isPaused = true;
    }

    // 继续计时器
    public void ResumeTimer()
    {
        isPaused = false;
    }
}

这个计时器包含了以下基本功能:

  • 可以设置定时器的持续时间、是否循环和是否暂停;
  • 可以在计时器结束时触发事件;
  • 可以重置、暂停和继续计时器。

你可以在需要使用计时器的脚本中添加Timer组件,然后访问组件并调用函数来控制计时器的行为。例如,在Start()函数中初始化计时器:

private Timer timer;

void Start()
{
    timer = gameObject.AddComponent<Timer>();
    timer.duration = 5.0f;
    timer.OnTimerFinished += OnTimerFinishedHandler;
}

// 计时器结束事件处理函数
void OnTimerFinishedHandler()
{
    Debug.Log("计时器结束了!");
}

然后,你可以在需要的时候调用计时器的函数来控制计时器的运行:

timer.ResetTimer(); // 重置计时器
timer.PauseTimer(); // 暂停计时器
timer.ResumeTimer(); // 继续计时器
11-03 16:09