Invoke和InvokeRepeating都是MonoBehaviour类中的方法.由于并不一定是始终执行,并且每帧反复执行,所以这两个方法基本写在Start()方法里,利用调用函数名来起到延时执行,或者(不)延时指定频率执行方法的效果.
延时函数Invoke使用方法:Invoke (methodName : string, time : float) : void
其中methodName是需要调用函数的的函数名,time是需要延时执行的时间.在Star()方法中写,就是在程序开始运行time秒后执行methodName函数.
using UnityEngine;
public class invoke_cube : MonoBehaviour {
void Start()
{
Invoke("Timer", 3f);
}
void Update()
{
}
void Timer()
{
Debug.Log("延时三秒后执行时间为:" + Time.time);
}
}
因为电脑性能问题可能导致一定的误差,没有对精度要求很高的要求可以用这个方法.
重复执行函数InvokeRepeating使用方法:
InvokeRepeating (methodName : string, time : float, repeatRate : float) : void
前两个和Invoke方法一样,最后一个repeatRate是每次执行间隔时间.在Star()方法中写,就是在程序开始运行time秒后,每repeatRate秒执行一次methodName方法.如果想在指定时间中断重复函数,就在设定时间执行CancelInvoke();方法即可.
using UnityEngine;
public class invoke_cube : MonoBehaviour {
void Start()
{
InvokeRepeating("Timer", 2f,1f);
}
void Update()
{
}
void Timer()
{
Debug.Log("此次执行的时间为:" + Time.time);
if (Time.time >= 8)
{
CancelInvoke();
}
}
}
可以看到,延时了2秒后,每1秒执行了Timer方法,并且在8秒的时候中断了这个方法
InvoekRepeating这个方法用的地方很多,目前所学的知识中,最经常应用到的地方就是定时或者延时生成预设体,如果生成预设体写在Update(); 或者FixedUpdate(); 函数中并且没加以条件限制,那么就会大量生成预设体,而InvokeRepeating方法就解决了定时或者延时生成预设体并且在需要的时间中断生成预设体.