前言
做项目时碰到当一个方法(函数)调用后延迟一段时间再调用另一个方法的情况,我发现unity本身有方法可以解决这个问题,因此记录如下:
MonoBehaviour.Invoke
public void Invoke (string methodName, float time);
上述描述出自官网API说明。
在使用时可以直接使用Invoke方法,第一个参数是需要调用的方法名称,第二个参数是延迟调用的时间,单位为秒s
using UnityEngine;
using System.Collections.Generic;
public class ExampleScript : MonoBehaviour
{
void Start()
{
Invoke("LaunchProjectile", 2.0f);
}
void LaunchProjectile()
{
Debug.Log("111");
}
}
上面脚本的含义是启动项目后,延迟两秒调用LaunchProjectile()方法,以此类推,Invoke可以嵌套在其他方法中,比如在一个方法调用后再延迟调用另一个,可以实现类似待机屏保的效果(无操作一段时间后播放)
using UnityEngine;
using System.Collections.Generic;
public class ExampleScript : MonoBehaviour
{
void Start()
{
Invoke("LaunchProjectile0", 2.0f);
}
void LaunchProjectile0()
{
Debug.Log("111");
Invoke("LaunchProjectile1", 2.0f);
}
void LaunchProjectile0()
{
Debug.Log("222");
}
}
其他类似的方法还有:
MonoBehaviour.InvokeRepeating
public void InvokeRepeating (string methodName, float time, float repeatRate);
在 time
秒后调用 methodName
方法,然后每 repeatRate
秒调用一次。
注意:如果将时间刻度设置为 0,该函数不起作用。
MonoBehaviour.CancelInvoke
public void CancelInvoke ();
取消该 MonoBehaviour 上的所有 Invoke 调用。
MonoBehaviour.IsInvoking
public bool IsInvoking (string methodName);
是否有任何待处理的 methodName
调用?返回一个布尔值