diff --git a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs index 6c2a37e..a4c67a2 100644 --- a/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs +++ b/src/UniTask/Assets/Plugins/UniTask/Runtime/UniTask.WaitUntil.cs @@ -28,7 +28,7 @@ namespace Cysharp.Threading.Tasks where T : class { var unityObject = target as UnityEngine.Object; - var isUnityObject = !object.ReferenceEquals(target, null); // don't use (unityObject == null) + var isUnityObject = target is UnityEngine.Object; // don't use (unityObject == null) return new UniTask(isUnityObject ? WaitUntilValueChangedUnityObjectPromise.Create(target, monitorFunction, equalityComparer, monitorTiming, cancellationToken, out var token) @@ -330,6 +330,7 @@ namespace Cysharp.Threading.Tasks static readonly PromisePool> pool = new PromisePool>(); T target; + UnityEngine.Object targetAsUnityObject; U currentValue; Func monitorFunction; IEqualityComparer equalityComparer; @@ -351,6 +352,7 @@ namespace Cysharp.Threading.Tasks var result = pool.TryRent() ?? new WaitUntilValueChangedUnityObjectPromise(); result.target = target; + result.targetAsUnityObject = target as UnityEngine.Object; result.monitorFunction = monitorFunction; result.currentValue = monitorFunction(target); result.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault(); @@ -399,7 +401,7 @@ namespace Cysharp.Threading.Tasks public bool MoveNext() { - if (cancellationToken.IsCancellationRequested || target == null) // destroyed = cancel. + if (cancellationToken.IsCancellationRequested || targetAsUnityObject == null) // destroyed = cancel. { core.TrySetCanceled(cancellationToken); return false;