下面是Unity封装延时调用定时器的完整攻略:
1. 创建Timer类
首先,我们需要创建一个Timer类,用来实现延时和定时功能。这个类应该至少有以下几个方法:
- Timer(float duration, Action callback):构造函数,接收一个duration参数表示延时或者定时的时间(单位为秒),和一个callback回调函数,在延时或定时时间到达时调用。
- Start():开始计时。
- Stop():停止计时。
- Reset():重置计时器,包括停止计时,将计时器归零。
以下是Timer类的代码示例:
using System;
using UnityEngine;
public class Timer
{
private float duration;
private Action callback;
private float currentTime = 0f;
private bool isRunning = false;
public Timer(float duration, Action callback)
{
this.duration = duration;
this.callback = callback;
}
public void Start()
{
isRunning = true;
}
public void Stop()
{
isRunning = false;
}
public void Reset()
{
currentTime = 0f;
isRunning = false;
}
public void Update()
{
if (!isRunning) return;
currentTime += Time.deltaTime;
if (currentTime >= duration)
{
callback();
isRunning = false;
}
}
}
2. 在MonoBehaviour中使用Timer
接下来,我们可以在MonoBehaviour中使用Timer来实现延时和定时功能。以下是使用Timer实现延时和定时的代码示例:
using System;
using UnityEngine;
public class Example : MonoBehaviour
{
private Timer delayTimer;
private Timer intervalTimer;
private void Start()
{
// 实现延时功能
delayTimer = new Timer(2f, DelayCallback);
delayTimer.Start();
// 实现定时功能
intervalTimer = new Timer(1f, IntervalCallback);
intervalTimer.Start();
}
private void Update()
{
// 更新计时器
delayTimer?.Update();
intervalTimer?.Update();
}
private void DelayCallback()
{
Debug.Log("DelayCallback");
}
private void IntervalCallback()
{
Debug.Log("IntervalCallback");
}
}
在这个示例中,我们创建了一个Example类,并在Start()方法中实例化了两个Timer,一个用来实现延时功能,一个用来实现定时功能。在Update()方法中更新了计时器。
3. 使用协程封装Timer
除了使用Update()方法实现计时器以外,还可以使用协程封装Timer。以下是使用协程封装Timer的代码示例:
using System;
using System.Collections;
using UnityEngine;
public class Example : MonoBehaviour
{
private Coroutine delayCoroutine;
private Coroutine intervalCoroutine;
private void Start()
{
// 实现延时功能
delayCoroutine = StartCoroutine(DelayCoroutine(2f, DelayCallback));
// 实现定时功能
intervalCoroutine = StartCoroutine(IntervalCoroutine(1f, IntervalCallback));
}
private void DelayCallback()
{
Debug.Log("DelayCallback");
}
private void IntervalCallback()
{
Debug.Log("IntervalCallback");
}
private IEnumerator DelayCoroutine(float duration, Action callback)
{
yield return new WaitForSeconds(duration);
callback();
}
private IEnumerator IntervalCoroutine(float duration, Action callback)
{
while (true)
{
yield return new WaitForSeconds(duration);
callback();
}
}
}
在这个示例中,我们使用了StartCoroutine()方法启动了两个协程,分别用来实现延时和定时功能。这里需要注意的是,在协程中使用yield return new WaitForSeconds(duration)语句实现计时功能。delayCoroutine和intervalCoroutine可以在需要时使用StopCoroutine()方法停止。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Unity封装延时调用定时器 - Python技术站