unity中的简单延时方法

来源:互联网 发布:手机网络的图标怎么换 编辑:程序博客网 时间:2024/05/27 14:12

unity中的简单延时方法

    在unity中我们经常会需要考虑一件事,如何让一个物体或者功能在特定的条件下出现,这时我们就可以考虑应用延时的方式来解决,我们可以通过设定不同的时间点,让物体干不同的事情,从而达到想要的效果。下面需要讲的的是两种比较常见的延时方法,一个是unity自带的InvokeInvokeRepeating,还有一个是协程。

一、场景的搭建

        首先我们先搭建一个简单的场景,为了达到直观的效果,我们先创建两个Cube,一个Cube用来验证Invoke和InvokeRepeating的方法,另一个用来验证协程。我们可以通过不同时间段改变Cube的材质来体现延时的效果。比如让Cube从初始的白色通过不同时间段,由白变红,再由红变黄,最后再变绿,通过改变颜色变换时需要的时间来达到延时效果。

二、功能实现

我们在其中一个Cube中添加一个自定义脚本delayedOne。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class delayedOne : MonoBehaviour{    public MeshRenderer skin;  //定义一个网格渲染器void Start ()    {        skin = this.transform.GetComponent<MeshRenderer>();  //获取网格渲染器        skin.material.color = Color.red;   //让物体材质变为红色        Invoke("changeOne", 2f);           //延时方法        // "changeOne", 2f, 1f);    }    private void changeOne()    {        skin.material.color = Color.yellow; //材质变为黄色        Invoke("changeTwo", 3f);    }    private void changeTwo()    {        skin.material.color = Color.green;  //材质变为绿色    }}

    在脚本中,主要用到Invoke这个延时方法。在使用Invoke这个方法之前,我们要先写一个延时的时候需要执行的方法,提供Invoke这个方法去调用别的方法来达到延时目的。Invoke的书写格式是在括号里添加需要调用的方法的方法名,后边跟着延时的时间。在脚本中我添加了2秒的时间,系统就会在过完2秒后执行changeOne方法,让物体材质变黄。别的方法里也可以添加Invoke方法,能达到嵌套的效果。而InvokeRepeating方法里多加了一个时间,那个时间指定的是重复执行方法的时间间隔。

在另一个Cube中添加自定义脚本delayedTwo。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class delayedTwo : MonoBehaviour{    public MeshRenderer skin;void Start ()    {        skin = this.transform.GetComponent<MeshRenderer>();        skin.material.color = Color.red;        StartCoroutine("changeSkin");  //开始协程}    IEnumerator changeSkin()  //协程方法    {        yield return new WaitForSeconds(2f);  //暂停协程,2秒后执行之后的操作        skin.material.color = Color.yellow;        yield return new WaitForSeconds(3f);  //3秒后执行之后的操作        skin.material.color = Color.green;    }}
    在脚本中主要运用协程来控制延时方法,要想使用协程先写方法,以IEnumerator开头,自定义名字,在方法中用yield return new WaitForSeconds()来暂停协程,括号里填时间,设定多少秒后执行之后的操作。脚本中先暂停协程,2秒后开始执行材质变黄操作,之后暂停3秒后执行材质变绿操作。协程方法写完后就是启动协程,用StartCoroutine加方法名来启动协程。

三、验证结果

        运行程序,通过观察我们可以看出虽然使用的方法不同,但两个Cube所体现的效果是相同的。

        

两个Cube同时从红变为黄再变为绿,两种不同的方法由于设定的延时相同,就能达到同样的效果。

四、总结

总之,unity中常用的延时方法就这两种,在Invoke方法中确定了调用方法,在确定延时时间就能实现延时功能,而协程也是通过调用方法,确定暂停协程的时间来达到延时效果,只要确定了延时的时间,我们便能通过调用方法来实现延时。

    

原创粉丝点击