浏览代码

改Resource为异步方法类

taochangchun 1 周之前
父节点
当前提交
e49ac37e1f

+ 0 - 8
Editor/UserInfo/UserData.asset.meta

@@ -1,8 +0,0 @@
1
-fileFormatVersion: 2
2
-guid: be8d41c132cdeb04bbf228513b4e7f03
3
-NativeFormatImporter:
4
-  externalObjects: {}
5
-  mainObjectFileID: 11400000
6
-  userData: 
7
-  assetBundleName: 
8
-  assetBundleVariant: 

+ 3 - 0
Runtime/Scripts/Main/Main.cs

@@ -1,6 +1,8 @@
1
+using Cysharp.Threading.Tasks;
1
 using System.Collections;
2
 using System.Collections;
2
 using System.Collections.Generic;
3
 using System.Collections.Generic;
3
 using System.Runtime.CompilerServices;
4
 using System.Runtime.CompilerServices;
5
+using System.Threading.Tasks;
4
 using TMPro;
6
 using TMPro;
5
 using UnityEngine;
7
 using UnityEngine;
6
 
8
 
@@ -99,6 +101,7 @@ namespace TFramework
99
     public delegate void TAction<in T1, in T2, in T3>(T1 arg0, T2 arg1, T3 arg2);
101
     public delegate void TAction<in T1, in T2, in T3>(T1 arg0, T2 arg1, T3 arg2);
100
     public delegate TRes TFunc<out TRes>();
102
     public delegate TRes TFunc<out TRes>();
101
     public delegate TRes TFunc<in T1, out TRes>(T1 arg0);
103
     public delegate TRes TFunc<in T1, out TRes>(T1 arg0);
104
+    public delegate UniTask<TRes> TFuncAsync<in T1, TRes>(T1 arg0);
102
     public delegate TRes TFunc<in T1, in T2, out TRes>(T1 arg0, T2 arg1);
105
     public delegate TRes TFunc<in T1, in T2, out TRes>(T1 arg0, T2 arg1);
103
 
106
 
104
     public enum ResLoadMode
107
     public enum ResLoadMode

+ 5 - 5
Runtime/Scripts/Resource/LoadResHandle.cs

@@ -34,14 +34,14 @@ namespace TFramework
34
         /// <summary>
34
         /// <summary>
35
         /// ¼ÓÔØÍê³Éʼþ
35
         /// ¼ÓÔØÍê³Éʼþ
36
         /// </summary>
36
         /// </summary>
37
-        public TAction<T> OnLoadOver;
37
+        public TFuncAsync<T,bool> OnLoadOver;
38
 
38
 
39
         public LoadResHandle()
39
         public LoadResHandle()
40
         {
40
         {
41
 
41
 
42
         }
42
         }
43
 
43
 
44
-        public LoadResHandle(ResLoadMode resLoadMode, string resourePath, string assetbundleName, string assetPath, TAction<float> onLoading = null, TAction<T> onLoadOver = null)
44
+        public LoadResHandle(ResLoadMode resLoadMode, string resourePath, string assetbundleName, string assetPath, TAction<float> onLoading = null, TFuncAsync<T, bool> onLoadOver = null)
45
         {
45
         {
46
             LoadMode = resLoadMode;
46
             LoadMode = resLoadMode;
47
             ResourcePath = resourePath;
47
             ResourcePath = resourePath;
@@ -57,7 +57,7 @@ namespace TFramework
57
         /// <param name="resourePath"></param>
57
         /// <param name="resourePath"></param>
58
         /// <param name="onLoading"></param>
58
         /// <param name="onLoading"></param>
59
         /// <param name="onLoadOver"></param>
59
         /// <param name="onLoadOver"></param>
60
-        public LoadResHandle(string resourePath, TAction<float> onLoading = null, TAction<T> onLoadOver = null)
60
+        public LoadResHandle(string resourePath, TAction<float> onLoading = null, TFuncAsync<T, bool> onLoadOver = null)
61
         {
61
         {
62
             LoadMode = ResLoadMode.Resourece;
62
             LoadMode = ResLoadMode.Resourece;
63
             ResourcePath = resourePath;
63
             ResourcePath = resourePath;
@@ -73,7 +73,7 @@ namespace TFramework
73
         /// <param name="assetPath"></param>
73
         /// <param name="assetPath"></param>
74
         /// <param name="onLoading"></param>
74
         /// <param name="onLoading"></param>
75
         /// <param name="onLoadOver"></param>
75
         /// <param name="onLoadOver"></param>
76
-        public LoadResHandle(string assetbundleName, string assetPath, TAction<float> onLoading = null, TAction<T> onLoadOver = null)
76
+        public LoadResHandle(string assetbundleName, string assetPath, TAction<float> onLoading = null, TFuncAsync<T, bool> onLoadOver = null)
77
         {
77
         {
78
             LoadMode = ResLoadMode.AssetBundle;
78
             LoadMode = ResLoadMode.AssetBundle;
79
             AssetBundleName = assetbundleName;
79
             AssetBundleName = assetbundleName;
@@ -82,7 +82,7 @@ namespace TFramework
82
             OnLoadOver = onLoadOver;
82
             OnLoadOver = onLoadOver;
83
         }
83
         }
84
 
84
 
85
-        public LoadResHandle(UIResourceAttribute attribute, TAction<float> onLoading = null, TAction<T> onLoadOver = null)
85
+        public LoadResHandle(UIResourceAttribute attribute, TAction<float> onLoading = null, TFuncAsync<T, bool> onLoadOver = null)
86
         {
86
         {
87
             LoadMode = attribute.LoadMode;
87
             LoadMode = attribute.LoadMode;
88
             ResourcePath = attribute.ResourcePath;
88
             ResourcePath = attribute.ResourcePath;

+ 81 - 89
Runtime/Scripts/Resource/ResourceManager.cs

@@ -101,23 +101,22 @@ namespace TFramework
101
         /// <param name="onLoading">加载中事件</param>
101
         /// <param name="onLoading">加载中事件</param>
102
         /// <param name="onLoadDone">加载完成事件</param>
102
         /// <param name="onLoadDone">加载完成事件</param>
103
         /// <returns></returns>
103
         /// <returns></returns>
104
-        public Coroutine LoadAssetAsync<T>(LoadResHandle<T> resHandle) where T : UnityEngine.Object
104
+        public async UniTask<T> LoadAssetAsync<T>(LoadResHandle<T> resHandle) where T : UnityEngine.Object
105
         {
105
         {
106
-            return StartCoroutine(LoadAsync(resHandle));
106
+            return await LoadAsync(resHandle);
107
         }
107
         }
108
 
108
 
109
-        private IEnumerator LoadAsync<T>(LoadResHandle<T> resHandle) where T : UnityEngine.Object
109
+        private async UniTask<T> LoadAsync<T>(LoadResHandle<T> resHandle) where T : UnityEngine.Object
110
         {
110
         {
111
             UnityEngine.Object asset = null;
111
             UnityEngine.Object asset = null;
112
             if (resHandle.LoadMode == ResLoadMode.Resourece)
112
             if (resHandle.LoadMode == ResLoadMode.Resourece)
113
             {
113
             {
114
                 ResourceRequest request = Resources.LoadAsync<T>(resHandle.ResourcePath);
114
                 ResourceRequest request = Resources.LoadAsync<T>(resHandle.ResourcePath);
115
-                while (!request.isDone)
115
+
116
+                await request.ToUniTask(Progress.Create<float>(pro =>
116
                 {
117
                 {
117
-                    resHandle.OnLoading?.Invoke(request.progress);
118
-                    yield return null;
119
-                }
120
-                resHandle.OnLoading?.Invoke(1);
118
+                    resHandle.OnLoading?.Invoke(pro);
119
+                }));
121
                 if (!request.asset)
120
                 if (!request.asset)
122
                     throw new UnityException($"资源加载失败:Resources文件夹中不存在资源 {resHandle.ResourcePath}!");
121
                     throw new UnityException($"资源加载失败:Resources文件夹中不存在资源 {resHandle.ResourcePath}!");
123
                 else
122
                 else
@@ -138,35 +137,33 @@ namespace TFramework
138
                 else
137
                 else
139
                 {
138
                 {
140
                     //等待相关依赖资源的加载
139
                     //等待相关依赖资源的加载
141
-                    yield return LoadDependenciesAssetBundleAsync(resHandle.AssetBundleName.ToLower());
142
-                    yield return LoadAssetBundleAsync(resHandle.AssetBundleName.ToLower(), resHandle.OnLoading);
140
+                    await LoadDependenciesAssetBundleAsync(resHandle.AssetBundleName.ToLower());
141
+                    await LoadAssetBundleAsync(resHandle.AssetBundleName.ToLower(), resHandle.OnLoading);
143
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
142
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
144
                     {
143
                     {
145
                         //asset = AssetBundles[resHandle.AssetBundleName].LoadAsset<T>(resHandle.AssetPath);
144
                         //asset = AssetBundles[resHandle.AssetBundleName].LoadAsset<T>(resHandle.AssetPath);
146
                         AssetBundleRequest request = AssetBundles[resHandle.AssetBundleName.ToLower()].LoadAssetAsync<T>(resHandle.AssetPath);
145
                         AssetBundleRequest request = AssetBundles[resHandle.AssetBundleName.ToLower()].LoadAssetAsync<T>(resHandle.AssetPath);
147
-                        yield return request;
148
-                        while (!request.isDone)
146
+                        await request;
147
+                        await request.ToUniTask(Progress.Create<float>(pro =>
149
                         {
148
                         {
150
-                            resHandle.OnLoading(request.progress / 2 + 0.5f);
151
-                            yield return null;
152
-                        }
149
+                            resHandle.OnLoading?.Invoke(pro);
150
+                        }));
153
                         asset = request.asset;
151
                         asset = request.asset;
154
                         if (!asset)
152
                         if (!asset)
155
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
153
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
156
                     }
154
                     }
157
                 }
155
                 }
158
 #else
156
 #else
159
-                yield return LoadDependenciesAssetBundleAsync(resHandle.AssetBundleName);
160
-                    yield return LoadAssetBundleAsync(resHandle.AssetBundleName, resHandle.OnLoading);
157
+                await LoadDependenciesAssetBundleAsync(resHandle.AssetBundleName.ToLower());
158
+                    await LoadAssetBundleAsync(resHandle.AssetBundleName.ToLower(), resHandle.OnLoading);
161
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
159
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
162
                     {
160
                     {
163
                         AssetBundleRequest request = AssetBundles[resHandle.AssetBundleName.ToLower()].LoadAssetAsync<T>(resHandle.AssetPath);
161
                         AssetBundleRequest request = AssetBundles[resHandle.AssetBundleName.ToLower()].LoadAssetAsync<T>(resHandle.AssetPath);
164
-                        yield return request;
165
-                        while(!request.isDone)
162
+                        await request;
163
+                        await request.ToUniTask(Progress.Create<float>(pro =>
166
                         {
164
                         {
167
-                            resHandle.OnLoading(request.progress / 2+0.5f);
168
-                            yield return null;
169
-                        }
165
+                            resHandle.OnLoading?.Invoke(pro);
166
+                        }));
170
                         asset = request.asset;
167
                         asset = request.asset;
171
                         if (!asset)
168
                         if (!asset)
172
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
169
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
@@ -181,6 +178,8 @@ namespace TFramework
181
             else
178
             else
182
                 resHandle.OnLoadOver?.Invoke(null);
179
                 resHandle.OnLoadOver?.Invoke(null);
183
 
180
 
181
+            return asset as T;
182
+
184
         }
183
         }
185
 
184
 
186
         /// <summary>
185
         /// <summary>
@@ -190,9 +189,9 @@ namespace TFramework
190
         /// <param name="onLoading">加载中事件</param>
189
         /// <param name="onLoading">加载中事件</param>
191
         /// <param name="onLoadDone">加载完成事件</param>
190
         /// <param name="onLoadDone">加载完成事件</param>
192
         /// <returns></returns>
191
         /// <returns></returns>
193
-        public Coroutine LoadSceneAsync(string scenePath, TAction<float> OnLoading, TAction<Scene> OnLoadOver, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
192
+        public async UniTask<Scene> LoadSceneAsync(string scenePath, TAction<float> OnLoading, TFuncAsync<Scene, bool> OnLoadOver, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
194
         {
193
         {
195
-            return StartCoroutine(LoadScene(scenePath, ResLoadMode.Resourece, "", OnLoading, OnLoadOver, loadSceneMode));
194
+           return  await LoadScene(scenePath, ResLoadMode.Resourece, "", OnLoading, OnLoadOver, loadSceneMode);
196
         }
195
         }
197
 
196
 
198
 
197
 
@@ -203,30 +202,26 @@ namespace TFramework
203
         /// <param name="onLoading">加载中事件</param>
202
         /// <param name="onLoading">加载中事件</param>
204
         /// <param name="onLoadDone">加载完成事件</param>
203
         /// <param name="onLoadDone">加载完成事件</param>
205
         /// <returns></returns>
204
         /// <returns></returns>
206
-        public Coroutine LoadSceneAsync(LoadResHandle<Scene> resHandle, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
205
+        public async UniTask<Scene> LoadSceneAsync(LoadResHandle<Scene> resHandle, LoadSceneMode loadSceneMode = LoadSceneMode.Single)
207
         {
206
         {
208
-            return StartCoroutine(LoadScene(resHandle.AssetPath,resHandle.LoadMode,resHandle.AssetBundleName,resHandle.OnLoading,resHandle.OnLoadOver, loadSceneMode));
207
+            return await LoadScene(resHandle.AssetPath,resHandle.LoadMode,resHandle.AssetBundleName,resHandle.OnLoading,resHandle.OnLoadOver, loadSceneMode);
209
         }
208
         }
210
 
209
 
211
-        private IEnumerator LoadScene(string scenePath, ResLoadMode loadMode ,string assetBundleName ,TAction<float> OnLoading,TAction<Scene> OnLoadOver, LoadSceneMode loadSceneMode)
210
+        private async UniTask<Scene> LoadScene(string scenePath, ResLoadMode loadMode ,string assetBundleName ,TAction<float> OnLoading,TFuncAsync<Scene, bool> OnLoadOver, LoadSceneMode loadSceneMode)
212
         {
211
         {
213
             if (SceneManager.GetSceneByPath(scenePath) == CurrentScene)
212
             if (SceneManager.GetSceneByPath(scenePath) == CurrentScene)
214
             {
213
             {
215
                 Debug.LogWarning($"场景{scenePath}已加载!");
214
                 Debug.LogWarning($"场景{scenePath}已加载!");
216
-                yield break;
215
+                return CurrentScene;
217
             }
216
             }
217
+            AsyncOperation ao;
218
             if (loadMode == ResLoadMode.Resourece)
218
             if (loadMode == ResLoadMode.Resourece)
219
             {
219
             {
220
-                AsyncOperation ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
221
-                while (!ao.isDone)
222
-                {
223
-                    OnLoading?.Invoke(ao.progress);
224
-                    yield return null;
225
-                }
220
+                ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
226
             }
221
             }
227
             else
222
             else
228
             {
223
             {
229
-                yield return LoadDependenciesAssetBundleAsync(assetBundleName.ToLower());
224
+                await LoadDependenciesAssetBundleAsync(assetBundleName.ToLower());
230
 #if UNITY_EDITOR
225
 #if UNITY_EDITOR
231
                 if (AssetConfig.RuntimeMode == UpdateMode.Editor)
226
                 if (AssetConfig.RuntimeMode == UpdateMode.Editor)
232
                 {
227
                 {
@@ -235,58 +230,59 @@ namespace TFramework
235
                         loadSceneMode = LoadSceneMode.Single,
230
                         loadSceneMode = LoadSceneMode.Single,
236
                         localPhysicsMode = LocalPhysicsMode.None
231
                         localPhysicsMode = LocalPhysicsMode.None
237
                     };
232
                     };
238
-                    AsyncOperation ao = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(scenePath, parameters);
239
-                    while (!ao.isDone)
240
-                    {
241
-                        OnLoading?.Invoke(ao.progress);
242
-                        yield return null;
243
-                    }
233
+                    ao = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(scenePath, parameters);
244
                 }
234
                 }
245
                 else
235
                 else
246
                 {
236
                 {
247
-                    yield return LoadAssetBundleAsync(assetBundleName.ToLower(), OnLoading);
248
-                    AsyncOperation ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
249
-                    while (!ao.isDone)
250
-                    {
251
-                        Debug.Log($"加载场景=={ao.isDone}==完成");
252
-                        OnLoading?.Invoke(ao.progress);
253
-                        yield return null;
254
-                    }
255
-                    Debug.Log($"加载场景{scenePath}完成");
237
+                    await LoadAssetBundleAsync(assetBundleName.ToLower(), OnLoading);
238
+                    ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
256
                 }
239
                 }
257
 #else
240
 #else
258
-                    yield return LoadAssetBundleAsync(assetBundleName, OnLoading);
259
-                    AsyncOperation ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
260
-                    while (!ao.isDone)
261
-                    {
262
-                        OnLoading?.Invoke(ao.progress);
263
-                        yield return null;
264
-                    }
241
+                    await LoadAssetBundleAsync(assetBundleName, OnLoading);
242
+                    ao = SceneManager.LoadSceneAsync(scenePath, loadSceneMode);
265
 #endif
243
 #endif
266
             }
244
             }
245
+            ao.allowSceneActivation = false;
246
+            while (ao.progress < 0.9f)
247
+            {
248
+                OnLoading?.Invoke(ao.progress);
249
+                await UniTask.Yield();
250
+            }
267
             Debug.Log($"加载场景{scenePath}完成");
251
             Debug.Log($"加载场景{scenePath}完成");
268
             OnLoading?.Invoke(1);
252
             OnLoading?.Invoke(1);
269
-            OnLoadOver?.Invoke(SceneManager.GetSceneByPath(scenePath));
253
+            if(OnLoadOver != null)
254
+            {
255
+                if (await OnLoadOver.Invoke(SceneManager.GetSceneByPath(scenePath)))
256
+                {
257
+                    ao.allowSceneActivation = true;
258
+                }
259
+            }
260
+            else
261
+                ao.allowSceneActivation = true;
262
+
263
+            await ao.ToUniTask();
264
+
265
+            SceneManager.SetActiveScene(SceneManager.GetSceneByPath(scenePath));
270
             CurrentScene = SceneManager.GetActiveScene();
266
             CurrentScene = SceneManager.GetActiveScene();
271
-            //SceneManager.SetActiveScene(CurrentScene);
267
+            return CurrentScene;
272
         }
268
         }
273
 
269
 
274
         /// <summary>
270
         /// <summary>
275
         /// 异步清理内存 回收垃圾
271
         /// 异步清理内存 回收垃圾
276
         /// </summary>
272
         /// </summary>
277
         /// <returns></returns>
273
         /// <returns></returns>
278
-        public Coroutine ClearMemoryAsync()
274
+        public async UniTask ClearMemoryAsync()
279
         {
275
         {
280
-            return StartCoroutine(ClearMemory());
276
+            await ClearMemory();
281
         }
277
         }
282
 
278
 
283
         /// <summary>
279
         /// <summary>
284
         /// 清理内存,释放空闲内存(异步)
280
         /// 清理内存,释放空闲内存(异步)
285
         /// </summary>
281
         /// </summary>
286
         /// <returns>协程迭代器</returns>
282
         /// <returns>协程迭代器</returns>
287
-        private IEnumerator ClearMemory()
283
+        private async UniTask ClearMemory()
288
         {
284
         {
289
-            yield return Resources.UnloadUnusedAssets();
285
+            await Resources.UnloadUnusedAssets();
290
             GC.Collect();
286
             GC.Collect();
291
             GC.WaitForPendingFinalizers();
287
             GC.WaitForPendingFinalizers();
292
         }
288
         }
@@ -295,14 +291,14 @@ namespace TFramework
295
         /// 异步卸载资源
291
         /// 异步卸载资源
296
         /// </summary>
292
         /// </summary>
297
         /// <returns></returns>
293
         /// <returns></returns>
298
-        public Coroutine UnLoadAsstAsync(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
294
+        public async UniTask UnLoadAsstAsync(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
299
         {
295
         {
300
-            return StartCoroutine(UnLoadAsst(resLoadMode, assetBundleName, unloadAllLoadedObjects));
296
+            await UnLoadAsst(resLoadMode, assetBundleName, unloadAllLoadedObjects);
301
         }
297
         }
302
 
298
 
303
-        private IEnumerator UnLoadAsst(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
299
+        private async UniTask UnLoadAsst(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
304
         {
300
         {
305
-            yield return UnLoadAsset(ResLoadMode.Resourece, assetBundleName, unloadAllLoadedObjects);
301
+            await UnLoadAsset(ResLoadMode.Resourece, assetBundleName, unloadAllLoadedObjects);
306
         }
302
         }
307
 
303
 
308
         /// <summary>
304
         /// <summary>
@@ -310,30 +306,30 @@ namespace TFramework
310
         /// </summary>
306
         /// </summary>
311
         /// <param name="scene"></param>
307
         /// <param name="scene"></param>
312
         /// <returns></returns>
308
         /// <returns></returns>
313
-        public Coroutine UnloadSceneAsync(Scene scene, TAction<float> OnUnloading = null, TAction OnUnloadOver = null)
309
+        public async UniTask UnloadSceneAsync(Scene scene, TAction<float> OnUnloading = null, TAction OnUnloadOver = null)
314
         {
310
         {
315
             Debug.Log($"卸载场景{scene.name}");
311
             Debug.Log($"卸载场景{scene.name}");
316
-            return StartCoroutine(UnloadScene(scene, OnUnloading, OnUnloadOver));
312
+            await UnloadScene(scene, OnUnloading, OnUnloadOver);
317
         }
313
         }
318
 
314
 
319
-        private IEnumerator UnloadScene(Scene scene, TAction<float> OnUnloading, TAction OnUnloadOver)
315
+        private async UniTask UnloadScene(Scene scene, TAction<float> OnUnloading, TAction OnUnloadOver)
320
         {
316
         {
321
             AsyncOperation ao = SceneManager.UnloadSceneAsync(scene);
317
             AsyncOperation ao = SceneManager.UnloadSceneAsync(scene);
322
             while (!ao.isDone)
318
             while (!ao.isDone)
323
             {
319
             {
324
                 OnUnloading?.Invoke(ao.progress);
320
                 OnUnloading?.Invoke(ao.progress);
325
-                yield return null;
321
+                await UniTask.Yield();
326
             }
322
             }
327
             OnUnloadOver?.Invoke();
323
             OnUnloadOver?.Invoke();
328
             CurrentScene = SceneManager.GetActiveScene();
324
             CurrentScene = SceneManager.GetActiveScene();
329
 
325
 
330
         }
326
         }
331
 
327
 
332
-        public IEnumerator UnLoadAsset(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
328
+        public async UniTask UnLoadAsset(ResLoadMode resLoadMode, string assetBundleName, bool unloadAllLoadedObjects = false)
333
         {
329
         {
334
             if (resLoadMode == ResLoadMode.Resourece)
330
             if (resLoadMode == ResLoadMode.Resourece)
335
             {
331
             {
336
-                yield return Resources.UnloadUnusedAssets();
332
+                await Resources.UnloadUnusedAssets();
337
             }
333
             }
338
             else
334
             else
339
             {
335
             {
@@ -343,7 +339,7 @@ namespace TFramework
343
                     AssetBundles[assetBundleName].Unload(unloadAllLoadedObjects);
339
                     AssetBundles[assetBundleName].Unload(unloadAllLoadedObjects);
344
                     AssetBundles.Remove(assetBundleName);
340
                     AssetBundles.Remove(assetBundleName);
345
                 }
341
                 }
346
-                yield return null;
342
+                await UniTask.Yield();
347
             }
343
             }
348
         }
344
         }
349
 
345
 
@@ -362,7 +358,7 @@ namespace TFramework
362
         /// 异步加载AB包清单
358
         /// 异步加载AB包清单
363
         /// </summary>
359
         /// </summary>
364
         /// <returns>协程迭代器</returns>
360
         /// <returns>协程迭代器</returns>
365
-        private IEnumerator LoadAssetBundleManifestAsync()
361
+        private async UniTask LoadAssetBundleManifestAsync()
366
         {
362
         {
367
             if (string.IsNullOrEmpty(AssetConfig.AssetBundleManifestName))
363
             if (string.IsNullOrEmpty(AssetConfig.AssetBundleManifestName))
368
             {
364
             {
@@ -372,15 +368,14 @@ namespace TFramework
372
             {
368
             {
373
                 if (AssetBundleManifest == null)
369
                 if (AssetBundleManifest == null)
374
                 {
370
                 {
375
-                    yield return LoadAssetBundleAsync(AssetConfig.AssetBundleManifestName, null);
371
+                    await LoadAssetBundleAsync(AssetConfig.AssetBundleManifestName, null);
376
                     if (AssetBundles.ContainsKey(AssetConfig.AssetBundleManifestName))
372
                     if (AssetBundles.ContainsKey(AssetConfig.AssetBundleManifestName))
377
                     {
373
                     {
378
                         AssetBundleManifest = AssetBundles[AssetConfig.AssetBundleManifestName].LoadAsset<AssetBundleManifest>("AssetBundleManifest");
374
                         AssetBundleManifest = AssetBundles[AssetConfig.AssetBundleManifestName].LoadAsset<AssetBundleManifest>("AssetBundleManifest");
379
-                        UnLoadAsset(ResLoadMode.AssetBundle, AssetConfig.AssetBundleManifestName);
375
+                        await UnLoadAsset(ResLoadMode.AssetBundle, AssetConfig.AssetBundleManifestName);
380
                     }
376
                     }
381
                 }
377
                 }
382
             }
378
             }
383
-            yield return null;
384
         }
379
         }
385
 
380
 
386
         /// <summary>
381
         /// <summary>
@@ -390,18 +385,18 @@ namespace TFramework
390
         /// <param name="onLoading">加载中事件</param>
385
         /// <param name="onLoading">加载中事件</param>
391
         /// <param name="isManifest">是否是加载清单</param>
386
         /// <param name="isManifest">是否是加载清单</param>
392
         /// <returns>协程迭代器</returns>
387
         /// <returns>协程迭代器</returns>
393
-        private IEnumerator LoadAssetBundleAsync(string assetBundleName, TAction<float> onLoading)
388
+        private async UniTask LoadAssetBundleAsync(string assetBundleName, TAction<float> onLoading)
394
         {
389
         {
395
             if (!AssetBundles.ContainsKey(assetBundleName))
390
             if (!AssetBundles.ContainsKey(assetBundleName))
396
             {
391
             {
397
                 AssetBundleCreateRequest abRequst = AssetBundle.LoadFromFileAsync(AssetConfig.AssetBundleRootPath + assetBundleName);
392
                 AssetBundleCreateRequest abRequst = AssetBundle.LoadFromFileAsync(AssetConfig.AssetBundleRootPath + assetBundleName);
398
 
393
 
399
-                yield return abRequst;
394
+                await abRequst;
400
 
395
 
401
                 while (!abRequst.isDone)
396
                 while (!abRequst.isDone)
402
                 {
397
                 {
403
                     onLoading?.Invoke(abRequst.progress / 2);
398
                     onLoading?.Invoke(abRequst.progress / 2);
404
-                    yield return null;
399
+                    await UniTask.Yield();
405
                 }
400
                 }
406
 
401
 
407
                 if (abRequst.assetBundle)
402
                 if (abRequst.assetBundle)
@@ -417,12 +412,12 @@ namespace TFramework
417
         /// </summary>
412
         /// </summary>
418
         /// <param name="assetBundleName">AB包名称</param>
413
         /// <param name="assetBundleName">AB包名称</param>
419
         /// <returns>协程迭代器</returns>
414
         /// <returns>协程迭代器</returns>
420
-        private IEnumerator LoadDependenciesAssetBundleAsync(string assetBundleName)
415
+        private async UniTask LoadDependenciesAssetBundleAsync(string assetBundleName)
421
         {
416
         {
422
 #if UNITY_EDITOR
417
 #if UNITY_EDITOR
423
             if (AssetConfig.RuntimeMode != UpdateMode.Editor)
418
             if (AssetConfig.RuntimeMode != UpdateMode.Editor)
424
             {
419
             {
425
-                yield return LoadAssetBundleManifestAsync();
420
+                await LoadAssetBundleManifestAsync();
426
                 if (AssetBundleManifest != null)
421
                 if (AssetBundleManifest != null)
427
                 {
422
                 {
428
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
423
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
@@ -431,27 +426,24 @@ namespace TFramework
431
                         if (AssetBundles.ContainsKey(item))
426
                         if (AssetBundles.ContainsKey(item))
432
                             continue;
427
                             continue;
433
 
428
 
434
-                        yield return LoadAssetBundleAsync(item, null);
429
+                       await LoadAssetBundleAsync(item, null);
435
                     }
430
                     }
436
                 }
431
                 }
437
             }
432
             }
438
 #else
433
 #else
439
-                yield return LoadAssetBundleManifestAsync();
434
+                await LoadAssetBundleManifestAsync();
440
                 if (AssetBundleManifest != null)
435
                 if (AssetBundleManifest != null)
441
                 {
436
                 {
442
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
437
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
443
                     foreach (string item in dependencies)
438
                     foreach (string item in dependencies)
444
                     {
439
                     {
445
                         if (AssetBundles.ContainsKey(item))
440
                         if (AssetBundles.ContainsKey(item))
446
-                        {
447
                             continue;
441
                             continue;
448
-                        }
449
 
442
 
450
-                        yield return LoadAssetBundleAsync(item,null);
443
+                       await LoadAssetBundleAsync(item, null);
451
                     }
444
                     }
452
                 }
445
                 }
453
 #endif
446
 #endif
454
-            yield return null;
455
         }
447
         }
456
     }
448
     }
457
 }
449
 }