/// <summary> /// 遅延実行 /// 指定したフレーム数waitします /// キャンセル処理をしたい場合は戻り値のIDを引数にしてCancelメソッドを実行してください /// </summary> public static int ExecuteFrameDelay(int delayFrame, Action action, MonoBehaviour invoker) { if (invoker == null || invoker.isActiveAndEnabled == false) { return(-1); } var data = new DelayedCallData(delayFrame, action, invoker); _delayedCallDataList.Add(data); data.coroutine = invoker.StartCoroutine(_Execute(data)); return(data.id); }
private static IEnumerator _Execute(DelayedCallData data) { if (data.type == WaitType.FRAME) { yield return(new WaitForFrameCount(data.frameDelay)); } else { yield return(new WaitForSeconds(data.delay)); } if (data.invoker != null) { data.action.SafeInvoke(); } _delayedCallDataList.Remove(data); }