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

一、场景的搭建
首先我们先搭建一个简单的场景,为了达到直观的效果,我们先创建两个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方法中确定了调用方法,在确定延时时间就能实现延时功能,而协程也是通过调用方法,确定暂停协程的时间来达到延时效果,只要确定了延时的时间,我们便能通过调用方法来实现延时。