关闭

Unity3d延时执行程序的方法

标签: unity3d
1474人阅读 评论(0) 收藏 举报
分类:

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


【一】协程

例子:

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

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3049次
    • 积分:154
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类