using UnityEngine; using Cysharp.Threading.Tasks; using System; public static class UniTaskExtension { public static void DelayFrame(this GameObject go, Action action) { DelayFrameInternal(1, action); } public static void DelayFrame(this Component cmp, Action action) { DelayFrameInternal(1, action); } private async static UniTask DelayFrameInternal(int frame, Action action) { await UniTask.DelayFrame(frame); action?.Invoke(); } public static void DelayFrames(this Component cmp, int frames, Action action) { DelayFrameInternal(frames, action); } public static void DelayFrames(this GameObject go, int frames, Action action) { DelayFrameInternal(frames, action); } public static void DelayFrame(Action action) { DelayFrameInternal(1, action); } public static void DelayTime(this GameObject go, float time, Action action) { DelayTimeInternal(time, action); } public static void DelayTime(this Component cmp, float time, Action action) { DelayTimeInternal(time, action); } private async static UniTask DelayTimeInternal(float time, Action action) { if (time <= 0f) { action?.Invoke(); return; } await UniTask.Delay(TimeSpan.FromSeconds(time)); action?.Invoke(); } }