Unity中MonoBehavior类中的延迟函数Invoke详解(含案例)
一、什么是延迟函数
含义:会延时执行的函数,我们可以自己设定延时要执行的函数和具体延时的时间,是MonoBehaviour基类中实现好的方法
二、延迟函数的使用
1.延迟函数
(1)关键字 Invoke
(2)参数
参数一:函数名 字符串
参数二:延迟时间 秒为单位
(3)注意
延时函数第一个参数传入的是函数名字符串
延时函数没办法传入参数 只有包裹一层
函数名必须是该脚本上申明的函数
2.延迟重复执行函数
(1)关键字 InvokeRepeating
(2)参数
参数一:函数名字符串
参数二:第一次执行的延迟时间
参数三:之后每次执行的间隔时间
(3)注意
延时函数第一个参数传入的是函数名字符串
延时函数没办法传入参数 只有包裹一层
函数名必须是该脚本上申明的函数
3.取消延迟函数
(1)关键字 CancelInvoke
(2)使用情景
【1】取消该脚本上的所有延时函数执行
CancelInvoke();
【2】指定函数名取消
Tips:只要取消了指定延迟 不管之前该函数开启了多少次 延迟执行 都会统一取消
CancelInvoke("DelayDoSomething");
4.判断是否有延迟函数
if( IsInvoking() )
{print("存在延迟函数");
}
if( IsInvoking("DelayDoSomething") )
{print("存在延迟函数DelayDoSomething");
}
三、延迟函数受对象失活销毁影响
1.脚本依附对象失活 或者 脚本自己失活——延迟函数可以继续执行 不会受到影响
2.脚本依附对象销毁或者脚本移除——延迟函数无法继续执行
四、练习题一
1.题目
利用延时函数实现一个计秒器
2.实现
void Start(){InvokeRepeating("DelayFun", 0, 1);}private void DelayFun()
{print(time + "秒");++time;
}
五、练习题二
1.题目
请用两种方式延时销毁一个指定对象
2.实现
方法一:
Destroy(this.gameObject, 5);
方法二:
Invoke("DelayDes", 5);
......private void DelayDes(){Destroy(this.gameObject);}