using UnityEngine;
using UnityEngine.Events;
public class CustomWait : CustomYieldInstruction
{
private UnityAction m_IntervalCallback;
private float m_StartTime;
private float m_LastTime;
private float m_Interval;
private float m_Time;
public CustomWait(float time, float interval, UnityAction callback)
{
m_StartTime = Time.time;
m_LastTime = Time.time;
m_Interval = interval;
m_Time = time;
m_IntervalCallback = callback;
}
//判断协成是否继续等待 false为协成结束
public override bool keepWaiting
{
get
{
if (Time.time - m_StartTime >= m_Time)
{
return false;
}
else if (Time.time - m_LastTime >= m_Interval)
{
m_LastTime = Time.time;
m_IntervalCallback();
}
return true;
}
}
}
public class TestCustomWait : MonoBehaviour {
IEnumerator Start () {
yield return new CustomWait(10f, 1f, delegate ()
{
Debug.LogError("自定义的协成等待");
});
}
}继承CustomYieldInstruction,实现keepWaiting接口,根据具体情况返回状态。
