这里只给出了两种方法,以后继续补充。
【一】协程
例子:
void Start()}
IEnumerator PlayerAttack()
{
yield return new WaitForSeconds(3.0f);
Debug.Log("After 3s");
}
3秒后显示“After 3s”信息。
注意:协程有些复杂,例如上面的程序修改成下面的样子后:
void Start()
{
StartCoroutine(PlayerAttack());
Debug.Log("After PlayerAttack");
}
IEnumerator PlayerAttack()
{
yield return new WaitForSeconds(3.0f);
Debug.Log("After 3s");
}
在显示“After 3s”信息前,会先显示“After PlayerAttack”信息。
【二】Invoke()方法
例子:
void Start()
{
Invoke("ShowWord", 3f);
}
public void ShowWord()
{
Debug.Log("I love the bird");
}
3秒后调用ShowWord()方法显示“I love the bird”信息。
注意:
Invoke()是一种委托机制,网上说有如下3点需要注意的事项:
1.它应该在脚本的生命周期里的Start()、Update()、OnGUI()、FIxedUpdate()、LateUpdate()中被调用;
2.Invoke()方法里不能接受含有参数的方法;
3.在 Time.ScaleTime = 0; 时,Invoke() 方法无效,因为它不会被调用。
对于第一点不是很了解,因为如下程序是可以按照预料去执行的:
void Start()
{
CallYou();
}
public void CallYou()
{
Invoke("ShowWord", 3f);
}
public void ShowWord()
{
Debug.Log("I love the bird");
}
上面程序中没有直接在 Start() 方法中调用 Invoke() 方法,不过还是正常执行,说明了这样使用 Invoke() 方法相当于直接在 Start() 方法中调用。
希望有谁能解释一下第一点是什么意思。