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接口,根据具体情况返回状态。