From 2254ac9f5ee03eb979c4af546d9718460156e1fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= Date: Thu, 24 Jul 2025 14:45:52 +0800 Subject: [PATCH] update UniTask sample MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新说明文档 --- .../Samples~/UniTask Sample/README-IMG.png | Bin 0 -> 48551 bytes .../UniTask Sample/README-IMG.png.meta | 153 ++++++++++++++++++ .../Samples~/UniTask Sample/README.md | 69 ++++---- .../YooAsset/AsyncOperationBaseExtensions.cs | 104 +++++------- .../YooAsset/OperationHandleBaseExtensions.cs | 126 ++++++--------- .../UniTask/Runtime/UniTask.asmref | 3 - .../UniTask/Runtime/UniTask.asmref.meta | 7 - .../UniTask/Runtime/_InternalVisibleTo.cs | 3 - .../Runtime/_InternalVisibleTo.cs.meta | 2 - 9 files changed, 276 insertions(+), 191 deletions(-) create mode 100644 Assets/YooAsset/Samples~/UniTask Sample/README-IMG.png create mode 100644 Assets/YooAsset/Samples~/UniTask Sample/README-IMG.png.meta delete mode 100644 Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref delete mode 100644 Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref.meta delete mode 100644 Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs delete mode 100644 Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs.meta diff --git a/Assets/YooAsset/Samples~/UniTask Sample/README-IMG.png b/Assets/YooAsset/Samples~/UniTask Sample/README-IMG.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae08e7978743c7a30ad766f8922411e6640d58c GIT binary patch literal 48551 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

7Oq7V8{-#n@k2>KFIWEoTJF`6BSC_AocK<%` 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 progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update) +using System; +using UnityEngine; +using YooAsset; +using Cysharp.Threading.Tasks; + +public class TestTask : MonoBehaviour { - var handle = YooAssets.LoadAssetAsync("Assets/Res/Prefabs/TestImg.prefab"); - - await handle.ToUniTask(progress, timing); - - var obj = handle.AssetObject as GameObject; - var go = Instantiate(obj, transform); - - go.transform.localPosition = Vector3.zero; - go.transform.localScale = Vector3.one; + private async void Start() + { + var assetHandle = YooAssets.LoadAssetAsync("UIHome"); + await assetHandle.ToUniTask(); + Debug.Log($"{assetHandle.Status}"); + } } ``` -## 初学者教程 +## 使用教程 -**如果你弄不明白 asmdef 文件到底是啥,就按照下发内容操作** +1. 下载 [UniTask](https://github.com/Cysharp/UniTask) 源码并导入到工程内。 -- 将 `Samples/UniTask Sample/UniTask` 文件夹拷入游戏中 -- 如果项目有 `asmdef`,则引用 `UniTask` 和 `YooAsset`,如果没有,就不用关心这一步 +2. 修改UniTask源码 + UniTask/Runtime/_InternalVisibleTo.cs -## 项目定制教程 + ```csharp + using System.Runtime.CompilerServices; + + [assembly: InternalsVisibleTo("UniTask.Linq")] + [assembly: InternalsVisibleTo("UniTask.Addressables")] + [assembly: InternalsVisibleTo("UniTask.DOTween")] + [assembly: InternalsVisibleTo("UniTask.TextMeshPro")] + [assembly: InternalsVisibleTo("UniTask.YooAsset")] //增加此行代码 + ``` -- 请去下载 [UniTask](https://github.com/Cysharp/UniTask) 源码 - - 注意不要用 `Sample` 里面的 `UniTask` 这个是专门给新手定制的 -- 将 `Samples/UniTask Sample/UniTask/Runtime/External/YooAsset` 文件夹拷贝到 `UniTask/Runtime/External/YooAsset` 中 -- 创建 `UniTask.YooAsset.asmdef` 文件 -- 添加 `UniTask` 和 `YooAsset` 的引用 -- 在 UniTask `_InternalVisibleTo.cs` 文件中增加 `[assembly: InternalsVisibleTo("UniTask.YooAsset")]` 后即可使用 +3. 拷贝YOO提供的扩展脚本到工程内。 -## 有效性检查 + YooAssets/Samples/UniTask Sample/UniTask/Runtime/External/YooAsset目录 -一般使用项目定制时, 会出现如下警告, 这说明项目没有配置正确, 建议使用 **初学者定制的** 版本 +4. 重启Unity引擎 -``` -yield BundledSceneProvider is not supported on await IEnumerator or Enumerator. ToUniTaskO, please use ToUniTask MonoBehaviou -coroutine Runner) instead -``` + 重新打开工程后用上面的代码示例验证,看下是否有编译错误! -- 在 IDE 中点击 ToUniTask 跳转代码, 看是否可以正确跳转到 `UniTask/Runtime/External/YooAsset` 文件夹中 -- 增加 `handle.ToUniTask(progress, timing)` 参数, 看是否有编译错误 +## 注意事项 -如果不正确, 需要检查业务逻辑的 `asmdef` 是否引用正确, 假设你项目业务逻辑的 `asmdef` 名为 `View.asmdef`, 那么在 `View` 中, 要包含如下引用 +- 注意检测程序集引用是否丢失 -- YooAsset -- UniTask -- UniTask.YooAsset - -如果引用正确, 依然还有报错, 说明定制流程有问题, 请检查定制内容是否正确, 或者使用 **初学者定制的** 版本 \ No newline at end of file +![image](./README-IMG.png) \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/AsyncOperationBaseExtensions.cs b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/AsyncOperationBaseExtensions.cs index d1c27aea..e1e8c382 100644 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/AsyncOperationBaseExtensions.cs +++ b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/AsyncOperationBaseExtensions.cs @@ -11,132 +11,110 @@ namespace Cysharp.Threading.Tasks { return ToUniTask(handle).GetAwaiter(); } - - public static UniTask ToUniTask(this AsyncOperationBase handle, - IProgress progress = null, - PlayerLoopTiming timing = PlayerLoopTiming.Update) + public static UniTask ToUniTask(this AsyncOperationBase handle, IProgress progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update) { ThrowArgumentNullException(handle, nameof(handle)); - if(handle.IsDone) + if (handle.IsDone) { return UniTask.CompletedTask; } return new UniTask( - AsyncOperationBaserConfiguredSource.Create( - handle, - timing, - progress, - out var token - ), + AsyncOperationBaserConfiguredSource.Create(handle, timing, progress, out var token), token ); } - sealed class AsyncOperationBaserConfiguredSource : IUniTaskSource, - IPlayerLoopItem, - ITaskPoolNode + sealed class AsyncOperationBaserConfiguredSource : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode { - private static TaskPool pool; + private static TaskPool _pool; + private AsyncOperationBaserConfiguredSource _nextNode; + private readonly Action _continuationAction; + private AsyncOperationBase _handle; + private IProgress _progress; + private bool _completed; + private UniTaskCompletionSourceCore _core; - private AsyncOperationBaserConfiguredSource nextNode; - - public ref AsyncOperationBaserConfiguredSource NextNode => ref nextNode; + public ref AsyncOperationBaserConfiguredSource NextNode => ref _nextNode; static AsyncOperationBaserConfiguredSource() { - TaskPool.RegisterSizeGetter(typeof(AsyncOperationBaserConfiguredSource), () => pool.Size); + TaskPool.RegisterSizeGetter(typeof(AsyncOperationBaserConfiguredSource), () => _pool.Size); } - private readonly Action continuationAction; - private AsyncOperationBase handle; - private IProgress progress; - private bool completed; - private UniTaskCompletionSourceCore core; + AsyncOperationBaserConfiguredSource() { _continuationAction = Continuation; } - AsyncOperationBaserConfiguredSource() { continuationAction = Continuation; } - - public static IUniTaskSource Create(AsyncOperationBase handle, - PlayerLoopTiming timing, - IProgress progress, - out short token) + public static IUniTaskSource Create(AsyncOperationBase handle, PlayerLoopTiming timing, IProgress progress, out short token) { - if(!pool.TryPop(out var result)) + if (!_pool.TryPop(out var result)) { result = new AsyncOperationBaserConfiguredSource(); } - result.handle = handle; - result.progress = progress; - result.completed = false; + result._handle = handle; + result._progress = progress; + result._completed = false; TaskTracker.TrackActiveTask(result, 3); - if(progress != null) + if (progress != null) { PlayerLoopHelper.AddAction(timing, result); } - handle.Completed += result.continuationAction; - - token = result.core.Version; - + handle.Completed += result._continuationAction; + token = result._core.Version; return result; } - + private void Continuation(AsyncOperationBase _) { - handle.Completed -= continuationAction; + _handle.Completed -= _continuationAction; - if(completed) + if (_completed) { TryReturn(); } else { - completed = true; - if(handle.Status == EOperationStatus.Failed) + _completed = true; + if (_handle.Status == EOperationStatus.Failed) { - core.TrySetException(new Exception(handle.Error)); + _core.TrySetException(new Exception(_handle.Error)); } else { - core.TrySetResult(AsyncUnit.Default); + _core.TrySetResult(AsyncUnit.Default); } } } - - bool TryReturn() + private bool TryReturn() { TaskTracker.RemoveTracking(this); - core.Reset(); - handle = default; - progress = default; - return pool.TryPush(this); + _core.Reset(); + _handle = default; + _progress = default; + return _pool.TryPush(this); } - public UniTaskStatus GetStatus(short token) => core.GetStatus(token); - + public UniTaskStatus GetStatus(short token) => _core.GetStatus(token); public void OnCompleted(Action continuation, object state, short token) { - core.OnCompleted(continuation, state, token); + _core.OnCompleted(continuation, state, token); } - - public void GetResult(short token) { core.GetResult(token); } - - public UniTaskStatus UnsafeGetStatus() => core.UnsafeGetStatus(); - + public void GetResult(short token) { _core.GetResult(token); } + public UniTaskStatus UnsafeGetStatus() => _core.UnsafeGetStatus(); public bool MoveNext() { - if(completed) + if (_completed) { TryReturn(); return false; } - if(!handle.IsDone) + if (!_handle.IsDone) { - progress?.Report(handle.Progress); + _progress?.Report(_handle.Progress); } return true; diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/OperationHandleBaseExtensions.cs b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/OperationHandleBaseExtensions.cs index 5c58d519..d94b8d99 100644 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/OperationHandleBaseExtensions.cs +++ b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/External/YooAsset/OperationHandleBaseExtensions.cs @@ -8,77 +8,61 @@ using System.Runtime.CompilerServices; using YooAsset; using static Cysharp.Threading.Tasks.Internal.Error; - namespace Cysharp.Threading.Tasks { - public static class OperationHandleBaseExtensions + public static class HandleBaseExtensions { public static UniTask.Awaiter GetAwaiter(this HandleBase handle) { return ToUniTask(handle).GetAwaiter(); } - - public static UniTask ToUniTask(this HandleBase handle, - IProgress progress = null, - PlayerLoopTiming timing = PlayerLoopTiming.Update) + public static UniTask ToUniTask(this HandleBase handle, IProgress progress = null, PlayerLoopTiming timing = PlayerLoopTiming.Update) { ThrowArgumentNullException(handle, nameof(handle)); - if(!handle.IsValid) + if (!handle.IsValid) { return UniTask.CompletedTask; } return new UniTask( - OperationHandleBaserConfiguredSource.Create( - handle, - timing, - progress, - out var token - ), + HandleBaserConfiguredSource.Create(handle, timing, progress, out var token), token ); } - sealed class OperationHandleBaserConfiguredSource : IUniTaskSource, - IPlayerLoopItem, - ITaskPoolNode + sealed class HandleBaserConfiguredSource : IUniTaskSource, IPlayerLoopItem, ITaskPoolNode { - private static TaskPool pool; + private static TaskPool _pool; + private HandleBaserConfiguredSource _nextNode; + private readonly Action _continuationAction; + private HandleBase _handle; + private IProgress _progress; + private bool _completed; + private UniTaskCompletionSourceCore _core; - private OperationHandleBaserConfiguredSource nextNode; + public ref HandleBaserConfiguredSource NextNode => ref _nextNode; - public ref OperationHandleBaserConfiguredSource NextNode => ref nextNode; - - static OperationHandleBaserConfiguredSource() + static HandleBaserConfiguredSource() { - TaskPool.RegisterSizeGetter(typeof(OperationHandleBaserConfiguredSource), () => pool.Size); + TaskPool.RegisterSizeGetter(typeof(HandleBaserConfiguredSource), () => _pool.Size); } - private readonly Action continuationAction; - private HandleBase handle; - private IProgress progress; - private bool completed; - private UniTaskCompletionSourceCore core; + HandleBaserConfiguredSource() { _continuationAction = Continuation; } - OperationHandleBaserConfiguredSource() { continuationAction = Continuation; } - - public static IUniTaskSource Create(HandleBase handle, - PlayerLoopTiming timing, - IProgress progress, - out short token) + public static IUniTaskSource Create(HandleBase handle, PlayerLoopTiming timing, IProgress progress, out short token) { - if(!pool.TryPop(out var result)) + if (!_pool.TryPop(out var result)) { - result = new OperationHandleBaserConfiguredSource(); + result = new HandleBaserConfiguredSource(); } - result.handle = handle; - result.progress = progress; - result.completed = false; + result._handle = handle; + result._progress = progress; + result._completed = false; TaskTracker.TrackActiveTask(result, 3); - if(progress != null) + if (progress != null) { PlayerLoopHelper.AddAction(timing, result); } @@ -88,7 +72,7 @@ namespace Cysharp.Threading.Tasks // BUG 也可能报的是 Action '1' Action '1' 的 InvalidCastException // BUG 此处不得不这么修改, 如果后续 Unity 修复了这个问题, 可以恢复之前的写法 #if UNITY_2020_BUG - switch(handle) + switch (handle) { case AssetHandle asset_handle: asset_handle.Completed += result.AssetContinuation; @@ -126,37 +110,33 @@ namespace Cysharp.Threading.Tasks break; } #endif - token = result.core.Version; - + token = result._core.Version; return result; } + #if UNITY_2020_BUG private void AssetContinuation(AssetHandle handle) { handle.Completed -= AssetContinuation; BaseContinuation(); } - private void SceneContinuation(SceneHandle handle) { handle.Completed -= SceneContinuation; BaseContinuation(); } - private void SubContinuation(SubAssetsHandle handle) { handle.Completed -= SubContinuation; BaseContinuation(); } - private void RawFileContinuation(RawFileHandle handle) { handle.Completed -= RawFileContinuation; BaseContinuation(); } - private void AllAssetsContinuation(AllAssetsHandle handle) - { + { handle.Completed -= AllAssetsContinuation; BaseContinuation(); } @@ -164,79 +144,73 @@ namespace Cysharp.Threading.Tasks [MethodImpl(MethodImplOptions.AggressiveInlining)] private void BaseContinuation() { - if(completed) + if (_completed) { TryReturn(); } else { - completed = true; - if(handle.Status == EOperationStatus.Failed) + _completed = true; + if (_handle.Status == EOperationStatus.Failed) { - core.TrySetException(new Exception(handle.LastError)); + _core.TrySetException(new Exception(_handle.LastError)); } else { - core.TrySetResult(AsyncUnit.Default); + _core.TrySetResult(AsyncUnit.Default); } } } - private void Continuation(HandleBase _) { - switch(handle) + switch (_handle) { case AssetHandle asset_handle: - asset_handle.Completed -= continuationAction; + asset_handle.Completed -= _continuationAction; break; case SceneHandle scene_handle: - scene_handle.Completed -= continuationAction; + scene_handle.Completed -= _continuationAction; break; case SubAssetsHandle sub_asset_handle: - sub_asset_handle.Completed -= continuationAction; + sub_asset_handle.Completed -= _continuationAction; break; case RawFileHandle raw_file_handle: - raw_file_handle.Completed -= continuationAction; + raw_file_handle.Completed -= _continuationAction; break; case AllAssetsHandle all_assets_handle: - all_assets_handle.Completed -= continuationAction; + all_assets_handle.Completed -= _continuationAction; break; } BaseContinuation(); } - - bool TryReturn() + private bool TryReturn() { TaskTracker.RemoveTracking(this); - core.Reset(); - handle = default; - progress = default; - return pool.TryPush(this); + _core.Reset(); + _handle = default; + _progress = default; + return _pool.TryPush(this); } - public UniTaskStatus GetStatus(short token) => core.GetStatus(token); - + public UniTaskStatus GetStatus(short token) => _core.GetStatus(token); public void OnCompleted(Action continuation, object state, short token) { - core.OnCompleted(continuation, state, token); + _core.OnCompleted(continuation, state, token); } - - public void GetResult(short token) { core.GetResult(token); } - - public UniTaskStatus UnsafeGetStatus() => core.UnsafeGetStatus(); - + public void GetResult(short token) { _core.GetResult(token); } + public UniTaskStatus UnsafeGetStatus() => _core.UnsafeGetStatus(); public bool MoveNext() { - if(completed) + if (_completed) { TryReturn(); return false; } - if(handle.IsValid) + if (_handle.IsValid) { - progress?.Report(handle.Progress); + _progress?.Report(_handle.Progress); } return true; diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref deleted file mode 100644 index 7e7a5fe1..00000000 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref +++ /dev/null @@ -1,3 +0,0 @@ -{ - "reference": "GUID:f51ebe6a0ceec4240a699833d6309b23" -} \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref.meta b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref.meta deleted file mode 100644 index 86f941d4..00000000 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/UniTask.asmref.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: a1f496f94e051be4b8cf9c5efd954c14 -AssemblyDefinitionReferenceImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs deleted file mode 100644 index 7083ea4e..00000000 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("UniTask.YooAsset")] \ No newline at end of file diff --git a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs.meta b/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs.meta deleted file mode 100644 index b48affca..00000000 --- a/Assets/YooAsset/Samples~/UniTask Sample/UniTask/Runtime/_InternalVisibleTo.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 6d04a1d7d6171ff438c8e68a007be014 \ No newline at end of file