unity中的简单延时方法

大憨熊 提交于 2019-11-27 00:54:07

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方法中确定了调用方法,在确定延时时间就能实现延时功能,而协程也是通过调用方法,确定暂停协程的时间来达到延时效果,只要确定了延时的时间,我们便能通过调用方法来实现延时。

    

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!