实现代码的延时执行,可以用Invoke、Coroutine实现,还可以借助DOTween这款插件实现延时执行,代码中尽量避免Coroutine协程代码实现延时,不清楚协程的底层是怎么实现的!可能会引起头大的bug。
一:用DOTween.To实现延时:
/// <summary>
/// DOTweenTo延时回调
/// </summary>
/// <param name="delayedTimer">延时的时间</param>
/// <param name="loopTimes">循环次数,0:不循环;负数:无限循环;正数:循环多少次</param>
public void DOTweenToTest(float delayedTimer, int loopTimes)
{
float timer = 0;
//DOTwwen.To()中参数:前两个参数是固定写法,第三个是到达的最终值,第四个是渐变过程所用的时间
Tween t = DOTween.To(() => timer, x => timer = x, 1, delayedTimer)
.OnStepComplete(() =>
{
print("996,oh yeah!");
})
.SetLoops(loopTimes);
}
.
二:队列,用DOTween.Sequence实现延时:
/// <summary>
/// DOTween.Sequence延时回调
/// </summary>
/// <param name="delayedTimer">延时的时间</param>
/// <param name="loopTimes">循环次数,0:不循环;负数:无限循环;正数:循环多少次</param>
public void DOTweenSequenceTest(float delayedTimer, ref int loopTimes)
{
Sequence seq = DOTween.Sequence();
seq.AppendCallback(() =>
{
print("yeah");
})
.SetDelay(delayedTimer)
.SetLoops(loopTimes);
}
.
说到DOTween.Sequence了,在这就先简单介绍一下DOTween队列的使用吧,
简单粗暴,看代码 ↓↓↓↓↓↓↓↓↓↓↓↓
/// <summary>
/// DOTween队列
/// </summary>
public void DOTweenSequence()
{
//首先要创建一个DOTween队列
Sequence seq = DOTween.Sequence();
//seq.Append 里面是让主相机振动的临时试验代码
seq.Append(Camera.main.transform.DOShakePosition(1f, new Vector3(0.8f, 0.8f, 0.8f)));
//seq.AppendInterval 传入的是一个时间数值,是在队列上一句代码执行完毕隔多长时间执行下一句代码
float delayedTimer = 5f;
seq.AppendInterval(delayedTimer);
//seq.AppendCallback 这里面可以写自己的代码回调了
seq.AppendCallback(() => { print("oh!"); });
seq.AppendInterval(3);//延时3秒执行下面队列中的逻辑
seq.AppendCallback(() => { print("yeah!"); });
}
DOTwenn这款插件很强大,这里只是把我近两天刚用到的它的知识点记录下来了。