Unity3d延时执行程序的方法

这里只给出了两种方法,以后继续补充。


【一】协程

例子:

void Start()
    {
        StartCoroutine(PlayerAttack());

    }


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() 方法中调用。

希望有谁能解释一下第一点是什么意思。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012871987/article/details/52386310
文章标签: unity3d
个人分类: Unity3d
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Unity3d延时执行程序的方法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭