赞
踩
延时执行的函数,可以自己设定延时要执行的函数和具体延时的时间,是Monobehaviour基类中实现好的方法
在Update等刷新函数内计时,timer += Time.deltaTime 当时间达到预期,执行需要延时的方法。需要注意的是,增量时间Time.deltaTime是每帧都不同的浮点数。计时器不能用 == 去判断达成条件。需要用 > 或 >= 加一个标志位。以确保函数能执行到且只执行一次 Update在 Time.timeScale = 0 时会正常执行,但这时Time.deltaTime的值为0。
- public class Test : MonoBehaviour
- {
- public float timer = 0f;
-
- void Update()
- {
- timer += Time.deltaTime;
- if (timer >= 2)
- {
- Func();
- timer = 0f; // 定时2秒
- }
- }
- void Func()
- {
- Debug.Log("每2秒执行一次");
- }
- }
Invoke是MonoBehaviour提供的函数,可以延时调用函数,但是,Invoke的调用是在运行时生效的,对于Func函数,很容易导致在代码审查阶段被误杀—函数删除后,编译不会报错。Invoke支持重复调用: InvokeRepeating("方法名",延时时长,每次调用间隔时长)
- public class Test : MonoBehaviour
- {
- private float delayTime = 2;
- private void Start()
- {
- Invoke("Func", delayTime);
- //InvokeRepeating("DelayFunc",delayTime,cdTime);
- }
- private void Func()
- {
- Debug.Log("延迟2s执行该函数");
- }
- }
取消延时函数:
- //取消延迟函数
- //取消该脚本上的所有延时函数执行
- CancelInvoke();
-
- //指定函数名取消
- //只要取消了指定延迟 不管之前该函数开启了多少次 延迟执行 都会统一取消
- CancelInvoke(nameof(DelayDoSomething));
协程本质是迭代器
- public class Test : MonoBehaviour
- {
- private void Start()
- {
- StartCoroutine(Show());
- }
- private IEnumerator Show()
- {
- yield return new WaitForSeconds(2);
- Func();
- }
-
- private void Func()
- {
- Debug.Log("延时2s执行");
- }
- }
4.DoTween 方法实现
DoTween函数中提供了一个方法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("调用函数");
- })
- .SetLoops(loopTimes);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。