From 71879266ac6a1ce20f7e2771547636d62f9c1ce7 Mon Sep 17 00:00:00 2001 From: neuecc Date: Thu, 7 Jan 2021 16:40:41 +0900 Subject: [PATCH] Fix DelayType.Realtime does not work when use BuildPlayer in UnityEditor --- .gitignore | 2 + .../Runtime/Internal/ValueStopwatch.cs | 2 + .../Plugins/UniTask/Runtime/UniTask.Delay.cs | 6 +++ src/UniTask/Assets/Scenes/EditorTest1.cs | 41 +++++++++++++++++++ src/UniTask/Assets/Scenes/EditorTest1.cs.meta | 11 +++++ src/UniTask/Assets/Scenes/SandboxMain.cs | 3 +- 6 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/UniTask/Assets/Scenes/EditorTest1.cs create mode 100644 src/UniTask/Assets/Scenes/EditorTest1.cs.meta diff --git a/.gitignore b/.gitignore index 60f5253..1145ba2 100644 --- a/.gitignore +++ b/.gitignore @@ -257,3 +257,5 @@ src/UniTask/Assembly-CSharp.Player.csproj src/UniTask/Unity.EditorCoroutines.Editor.csproj src/UniTask/.vsconfig + +src/UniTask/Logs/ApiUpdaterCheck.txt diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs index fa8a8ea..d55d1f6 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/Internal/ValueStopwatch.cs @@ -18,6 +18,8 @@ namespace Cysharp.Threading.Tasks.Internal public TimeSpan Elapsed => TimeSpan.FromTicks(this.ElapsedTicks); + public bool IsInvalid => startTimestamp == 0; + public long ElapsedTicks { get diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs index d89dd5e..fd13bd2 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.Delay.cs @@ -726,6 +726,12 @@ namespace Cysharp.Threading.Tasks return false; } + if (stopwatch.IsInvalid) + { + core.TrySetResult(AsyncUnit.Default); + return false; + } + if (stopwatch.ElapsedTicks >= delayTimeSpanTicks) { core.TrySetResult(AsyncUnit.Default); diff --git a/src/UniTask/Assets/Scenes/EditorTest1.cs b/src/UniTask/Assets/Scenes/EditorTest1.cs new file mode 100644 index 0000000..95a810b --- /dev/null +++ b/src/UniTask/Assets/Scenes/EditorTest1.cs @@ -0,0 +1,41 @@ +#if UNITY_EDITOR + +using System; +using Cysharp.Threading.Tasks; +using UnityEditor; +using UnityEngine; + +public class Test1 +{ + [MenuItem("Test/Test1")] + public static async UniTaskVoid TestFunc() + { + await DoSomeThing(); + string[] scenes = new string[] + { + "Assets/Scenes/SandboxMain.unity", + }; + + try + { + Debug.Log("Build Begin"); + BuildPipeline.BuildPlayer(scenes, Application.dataPath + "../target", BuildTarget.StandaloneWindows, BuildOptions.CompressWithLz4); + Debug.Log("Build After"); + } + catch (Exception e) + { + Debug.LogError(e.Message); + } + } + + public static async UniTask DoSomeThing() + { + Debug.Log("Dosomething"); + await UniTask.Delay(1500, DelayType.Realtime); + Debug.Log("Dosomething 2"); + await UniTask.Delay(1000, DelayType.Realtime); + Debug.Log("Dosomething 3"); + } +} + +#endif \ No newline at end of file diff --git a/src/UniTask/Assets/Scenes/EditorTest1.cs.meta b/src/UniTask/Assets/Scenes/EditorTest1.cs.meta new file mode 100644 index 0000000..5eb81e3 --- /dev/null +++ b/src/UniTask/Assets/Scenes/EditorTest1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48003021292963e48b2493e915dca5ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UniTask/Assets/Scenes/SandboxMain.cs b/src/UniTask/Assets/Scenes/SandboxMain.cs index 1d9c8d0..10c2eca 100644 --- a/src/UniTask/Assets/Scenes/SandboxMain.cs +++ b/src/UniTask/Assets/Scenes/SandboxMain.cs @@ -577,7 +577,8 @@ public class SandboxMain : MonoBehaviour StartCoroutine(LastYieldCore()); Debug.Log("BEFORE:" + Time.frameCount); - + + await UniTask.Yield(); // await UniTask.Yield(PlayerLoopTiming.LastTimeUpdate); Debug.Log("AFTER:" + Time.frameCount);