以下是 Unity 定时器的实现源码,包括计划任务、暂停、恢复等功能:

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

public class TimerManager : MonoBehaviour
{
    private static TimerManager instance;

    private List<Timer> timers = new List<Timer>();

    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else if (instance != this)
        {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(gameObject);
    }

    private void Update()
    {
        for (int i = 0; i < timers.Count; i++)
        {
            Timer timer = timers[i];

            if (timer.IsPaused)
            {
                continue;
            }

            timer.CurrentTime += Time.deltaTime;

            if (timer.CurrentTime >= timer.Duration)
            {
                timer.OnTimerComplete();

                if (timer.IsRepeating)
                {
                    timer.Reset();
                }
                else
                {
                    timers.Remove(timer);
                }
            }
        }
    }

    public static Timer AddTimer(float duration, bool isRepeating, System.Action onTimerComplete)
    {
        Timer timer = new Timer(duration, isRepeating, onTimerComplete);

        instance.timers.Add(timer);

        return timer;
    }

    public static void RemoveTimer(Timer timer)
    {
        instance.timers.Remove(timer);
    }

    public static void PauseAllTimers()
    {
        for (int i = 0; i < instance.timers.Count; i++)
        {
            Timer timer = instance.timers[i];
            timer.IsPaused = true;
        }
    }

    public static void ResumeAllTimers()
    {
        for (int i = 0; i < instance.timers.Count; i++)
        {
            Timer timer = instance.timers[i];
            timer.IsPaused = false;
        }
    }
}

public class Timer
{
    public float Duration { get; private set; }
    public bool IsRepeating { get; private set; }
    public System.Action OnTimerComplete { get; private set; }
    public bool IsPaused { get; set; }

    public float CurrentTime { get; set; }

    public Timer(float duration, bool isRepeating, System.Action onTimerComplete)
    {
        Duration = duration;
        IsRepeating = isRepeating;
        OnTimerComplete = onTimerComplete;

        Reset();
    }

    public void Reset()
    {
        CurrentTime = 0;
    }
}

使用方法:

// 添加定时器
TimerManager.AddTimer(2f, false, () => {
    Debug.Log("Timer complete!");
});

// 暂停所有定时器
TimerManager.PauseAllTimers();

// 恢复所有定时器
TimerManager.ResumeAllTimers();

其中,AddTimer 方法用于添加定时器,参数包括持续时间、是否重复、定时器完成回调函数。PauseAllTimersResumeAllTimers 方法用于暂停和恢复所有定时器。

unity 定时器实现源码

原文地址: https://www.cveoy.top/t/topic/9ZL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录