在写脚本代码的时候,我们会遇到这样的需求,需要我们等待一定的时间才可以执行接下来的代码。例如用C#代码实现:物品从A点平移到B点,等待3秒之后再平移到C点。这篇文章就是教你如何做到让代码等待3秒才可以继续运行的。
- 方法一 Invoke()方法
- Invoke("方法名", 等待时间);
- Invoke(nameof(方法名), 等待时间);
- 方法二 协程
- 受时间缩放影响
- 不受时间缩放影响
设置一个变量(接下来都会使用这个变量):
private float duration;Invoke(“方法名”, 等待时间);
在你的方法体里可以加上这句:
Invoke("MethodName", duration);
别忘了补上名为MethodName的方法:
private void MethodName()
{
//这里写上duration秒后要执行的内容
}
MethodName方法里写的就是duration秒后要执行的内容
Invoke(nameof(方法名), 等待时间);不过我更喜欢使用下面这种写法:
Invoke(nameof(MethodName), duration);
private void MethodName()
{
//这里写上duration秒后要执行的内容
}
因为nameof()里的参数可以直接指向你的方法。使用string形式的方法名总是担心会拼错,如果代码行数太多的话,想找到MethodName方法也比较麻烦。
方法二 协程自从我学会用协程之后,上述的Invoke()等待时间方法我就很少用了,因为使用协程可以使用匿名函数,可以选择update时间或者是真实时间,总之就是先进太多了,不过不熟悉协程的朋友使用起来可能会有点吃力。
受时间缩放影响若你希望等待的时间受时间缩放影响,即update时间,那么你可以这么写一个协程方法:
////// 等待时间(受到Time.timeScale的影响) /// /// 等待时间 /// 等待后执行的函数 ///public static IEnumerator WaitForSeconds(float duration, Action action = null) { yield return new WaitForSeconds(duration); action?.Invoke(); }
然后在你的方法体里加上这句:
StartCoroutine(WaitForSeconds(duration, () =>
{
//这里写上duration秒后要执行的内容
}))
不受时间缩放影响
若你希望等待的时间不受时间缩放影响,即真实时间,那么你可以这么写一个协程方法:
////// 等待时间(不会受到Time.timeScale的影响) /// /// 等待时间 /// 等待后执行的函数 ///public static IEnumerator WaitForSecondsRealtime(float duration, Action action = null) { yield return new WaitForSecondsRealtime(duration); action?.Invoke(); }
然后在你的方法体里加上这句:
StartCoroutine(WaitForSecondsRealtime(duration, () =>
{
//这里写上duration秒后要执行的内容
}))
熟悉使用协程和了解匿名函数的朋友应该还能玩出更多花样吧hhhh
希望可以帮到你~



