Unity 等待一定的时间再执行接下来的代码的方法

在写脚本代码的时候,我们会遇到这样的需求,需要我们等待一定的时间才可以执行接下来的代码。例如用C#代码实现:物品从A点平移到B点,等待3秒之后再平移到C点。这篇文章就是教你如何做到让代码等待3秒才可以继续运行的。

目录

  • 方法一 Invoke()方法
    • Invoke("方法名", 等待时间);
    • Invoke(nameof(方法名), 等待时间);
  • 方法二 协程
    • 受时间缩放影响
    • 不受时间缩放影响

方法一 Invoke()方法

设置一个变量(接下来都会使用这个变量):

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

希望可以帮到你~

你可能感兴趣的:(Unity,C#)