有时会有这样的需求,比如人物死亡之后5秒尸体消失、子弹的痕迹10秒之后消失……
我们怎么可以方便的延时调用我们自己写的函数呢?
以下代码用两种方式延时执行自定义函数。一种是Invoke函数,另一种是协程。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestTime : MonoBehaviour
{
//满足某个条件
bool isOk;
private void Start()
{
isOk = true;
}
private void Update()
{
if(isOk)
{
Invoke("MyFunction", 3);//3秒之后执行MyFunction
StartCoroutine(Delayed());//开启协程
isOk = false;
}
}
private void MyFunction()
{
print("执行我的函数");
}
IEnumerator Delayed()
{
yield return new WaitForSeconds(6);//6秒之后执行之后的语句
MyFunction();
}
}
运行结果,16秒执行了一次MyFunction,3秒之后(19秒)又执行了一次MyFunction
注意以下几点:
1.我们的类必须继承MonoBehaviour,才有Invoke和StartCoroutine函数。
2.Invoke只要执行之后,即使我们的类所挂载的物体已经删除了或Active为false仍然可以延时调用我们的函数。
3.使用协程之后,所挂载的物体必须存在(没被Destroy或SetActive(false))才可以延时调用我们的函数。