unity中的简单延时方法
在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方法中确定了调用方法,在确定延时时间就能实现延时功能,而协程也是通过调用方法,确定暂停协程的时间来达到延时效果,只要确定了延时的时间,我们便能通过调用方法来实现延时。
来源:CSDN
作者:X_Ye
链接:https://blog.csdn.net/qq_31791999/article/details/77866367