U2L6——延迟函数

本章代码关键字

1
2
3
4
Invoke()            //延迟执行函数,第一个参数填入无参函数字符串,第二个参数填入延迟时间,将按照设定延迟执行无参函数,无法延迟执行有参函数
InvokeRepeating() //延迟重复执行函数,与上个函数多了一个第一次执行后每隔多久执行一次的参数
CancelInvoke() //取消延迟函数,若不填参数则将全部延迟函数取消,填入参数则取消该参数对应的延迟函数
IsInvoking() //判断是否有延迟函数,若填入参数则检测对应的延迟函数

延迟函数

延时函数顾名思义,就是会延时执行的函数
我们可以自己设定延时要执行的函数和具体延时的时间
这是MonoBehaviour​基类中实现好的方法

这个属于MonoBehaviour​基类的重要方法,之前的重要方法看这里 -> MonoBehaviour​

继承MonoBehaviour​的脚本可以使用延时相关函数
参数都是函数名,无法传参,只能执行该脚本中申明的函数
对象或脚本失活无法停止延时函数执行,只有销毁组件或者对象才会停止或者通过代码停止

延迟函数的作用

延迟函数:Invoke

  • 参数一:函数名 字符串
  • 参数二:延迟时间 秒为单位
1
Invoke("DelayDoSomething", 5);

注意:
延时函数第一个参数传入的是 函数名字符串!!!
延时函数没办法传入参数 只有包裹(封装在无参函数里)一层!!!
函数名必须是该脚本上申明的函数!如果需要调用外部的函数,需要封装到自己的函数里

延迟重复执行函数

延迟重复执行函数:InvokeRepeating()

  • 参数一:函数名字符串
  • 参数二:第一次执行的延迟时间
  • 参数三:之后每次执行的间隔时间
1
InvokeRepeating("DelayRe", 5, 1);

注意:注意事项和延迟函数一致

取消延迟函数

取消该脚本上所有延时函数执行

1
CancelInvoke();

指定函数名取消

填入参数则指定参数对应的延迟函数取消,只要取消了指定延迟 不管之前该函数开启了多少次 延迟执行都会统一取消

1
CancelInvoke("DelayDoSomething");

判断是否有延迟函数

1
2
3
4
5
6
7
8
if (IsInvoking())
{
print("存在延迟函数");
}
if (IsInvoking("DelayDoSomething"))
{
print("存在延迟函数DelayDoSomething");
}

延迟函数受对象失活销毁影响

  • 脚本依附对象失活, 延迟函数可以继续执行
  • 脚本依附对象销毁或者脚本移除, 延迟函数无法继续执行
1
2
3
4
5
6
7
8
9
private void OnEnable()
{
//对象激活 的生命周期函数中 开始延迟(重复执行的延迟)
}

private void OnDisable()
{
//对象失活 的生命周期函数中 停止延迟
}