| 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(); | 
|     } | 
| } |