Quellcode durchsuchen

改Resource为异步方法类

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

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

@@ -34,14 +34,14 @@ namespace TFramework
34 34
         /// <summary>
35 35
         /// ¼ÓÔØÍê³Éʼþ
36 36
         /// </summary>
37
-        public TAction<T> OnLoadOver;
37
+        public TFuncAsync<T,bool> OnLoadOver;
38 38
 
39 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 46
             LoadMode = resLoadMode;
47 47
             ResourcePath = resourePath;
@@ -57,7 +57,7 @@ namespace TFramework
57 57
         /// <param name="resourePath"></param>
58 58
         /// <param name="onLoading"></param>
59 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 62
             LoadMode = ResLoadMode.Resourece;
63 63
             ResourcePath = resourePath;
@@ -73,7 +73,7 @@ namespace TFramework
73 73
         /// <param name="assetPath"></param>
74 74
         /// <param name="onLoading"></param>
75 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 78
             LoadMode = ResLoadMode.AssetBundle;
79 79
             AssetBundleName = assetbundleName;
@@ -82,7 +82,7 @@ namespace TFramework
82 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 87
             LoadMode = attribute.LoadMode;
88 88
             ResourcePath = attribute.ResourcePath;

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

@@ -101,23 +101,22 @@ namespace TFramework
101 101
         /// <param name="onLoading">加载中事件</param>
102 102
         /// <param name="onLoadDone">加载完成事件</param>
103 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 111
             UnityEngine.Object asset = null;
112 112
             if (resHandle.LoadMode == ResLoadMode.Resourece)
113 113
             {
114 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 120
                 if (!request.asset)
122 121
                     throw new UnityException($"资源加载失败:Resources文件夹中不存在资源 {resHandle.ResourcePath}!");
123 122
                 else
@@ -138,35 +137,33 @@ namespace TFramework
138 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 142
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
144 143
                     {
145 144
                         //asset = AssetBundles[resHandle.AssetBundleName].LoadAsset<T>(resHandle.AssetPath);
146 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 151
                         asset = request.asset;
154 152
                         if (!asset)
155 153
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
156 154
                     }
157 155
                 }
158 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 159
                     if (AssetBundles.ContainsKey(resHandle.AssetBundleName.ToLower()))
162 160
                     {
163 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 167
                         asset = request.asset;
171 168
                         if (!asset)
172 169
                             throw new UnityException(string.Format("加载资源失败:AB包 {0} 中不存在资源 {1}!", resHandle.AssetBundleName, resHandle.AssetPath));
@@ -181,6 +178,8 @@ namespace TFramework
181 178
             else
182 179
                 resHandle.OnLoadOver?.Invoke(null);
183 180
 
181
+            return asset as T;
182
+
184 183
         }
185 184
 
186 185
         /// <summary>
@@ -190,9 +189,9 @@ namespace TFramework
190 189
         /// <param name="onLoading">加载中事件</param>
191 190
         /// <param name="onLoadDone">加载完成事件</param>
192 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 202
         /// <param name="onLoading">加载中事件</param>
204 203
         /// <param name="onLoadDone">加载完成事件</param>
205 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 212
             if (SceneManager.GetSceneByPath(scenePath) == CurrentScene)
214 213
             {
215 214
                 Debug.LogWarning($"场景{scenePath}已加载!");
216
-                yield break;
215
+                return CurrentScene;
217 216
             }
217
+            AsyncOperation ao;
218 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 222
             else
228 223
             {
229
-                yield return LoadDependenciesAssetBundleAsync(assetBundleName.ToLower());
224
+                await LoadDependenciesAssetBundleAsync(assetBundleName.ToLower());
230 225
 #if UNITY_EDITOR
231 226
                 if (AssetConfig.RuntimeMode == UpdateMode.Editor)
232 227
                 {
@@ -235,58 +230,59 @@ namespace TFramework
235 230
                         loadSceneMode = LoadSceneMode.Single,
236 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 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 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 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 251
             Debug.Log($"加载场景{scenePath}完成");
268 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 266
             CurrentScene = SceneManager.GetActiveScene();
271
-            //SceneManager.SetActiveScene(CurrentScene);
267
+            return CurrentScene;
272 268
         }
273 269
 
274 270
         /// <summary>
275 271
         /// 异步清理内存 回收垃圾
276 272
         /// </summary>
277 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 279
         /// <summary>
284 280
         /// 清理内存,释放空闲内存(异步)
285 281
         /// </summary>
286 282
         /// <returns>协程迭代器</returns>
287
-        private IEnumerator ClearMemory()
283
+        private async UniTask ClearMemory()
288 284
         {
289
-            yield return Resources.UnloadUnusedAssets();
285
+            await Resources.UnloadUnusedAssets();
290 286
             GC.Collect();
291 287
             GC.WaitForPendingFinalizers();
292 288
         }
@@ -295,14 +291,14 @@ namespace TFramework
295 291
         /// 异步卸载资源
296 292
         /// </summary>
297 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 304
         /// <summary>
@@ -310,30 +306,30 @@ namespace TFramework
310 306
         /// </summary>
311 307
         /// <param name="scene"></param>
312 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 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 317
             AsyncOperation ao = SceneManager.UnloadSceneAsync(scene);
322 318
             while (!ao.isDone)
323 319
             {
324 320
                 OnUnloading?.Invoke(ao.progress);
325
-                yield return null;
321
+                await UniTask.Yield();
326 322
             }
327 323
             OnUnloadOver?.Invoke();
328 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 330
             if (resLoadMode == ResLoadMode.Resourece)
335 331
             {
336
-                yield return Resources.UnloadUnusedAssets();
332
+                await Resources.UnloadUnusedAssets();
337 333
             }
338 334
             else
339 335
             {
@@ -343,7 +339,7 @@ namespace TFramework
343 339
                     AssetBundles[assetBundleName].Unload(unloadAllLoadedObjects);
344 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 358
         /// 异步加载AB包清单
363 359
         /// </summary>
364 360
         /// <returns>协程迭代器</returns>
365
-        private IEnumerator LoadAssetBundleManifestAsync()
361
+        private async UniTask LoadAssetBundleManifestAsync()
366 362
         {
367 363
             if (string.IsNullOrEmpty(AssetConfig.AssetBundleManifestName))
368 364
             {
@@ -372,15 +368,14 @@ namespace TFramework
372 368
             {
373 369
                 if (AssetBundleManifest == null)
374 370
                 {
375
-                    yield return LoadAssetBundleAsync(AssetConfig.AssetBundleManifestName, null);
371
+                    await LoadAssetBundleAsync(AssetConfig.AssetBundleManifestName, null);
376 372
                     if (AssetBundles.ContainsKey(AssetConfig.AssetBundleManifestName))
377 373
                     {
378 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 381
         /// <summary>
@@ -390,18 +385,18 @@ namespace TFramework
390 385
         /// <param name="onLoading">加载中事件</param>
391 386
         /// <param name="isManifest">是否是加载清单</param>
392 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 390
             if (!AssetBundles.ContainsKey(assetBundleName))
396 391
             {
397 392
                 AssetBundleCreateRequest abRequst = AssetBundle.LoadFromFileAsync(AssetConfig.AssetBundleRootPath + assetBundleName);
398 393
 
399
-                yield return abRequst;
394
+                await abRequst;
400 395
 
401 396
                 while (!abRequst.isDone)
402 397
                 {
403 398
                     onLoading?.Invoke(abRequst.progress / 2);
404
-                    yield return null;
399
+                    await UniTask.Yield();
405 400
                 }
406 401
 
407 402
                 if (abRequst.assetBundle)
@@ -417,12 +412,12 @@ namespace TFramework
417 412
         /// </summary>
418 413
         /// <param name="assetBundleName">AB包名称</param>
419 414
         /// <returns>协程迭代器</returns>
420
-        private IEnumerator LoadDependenciesAssetBundleAsync(string assetBundleName)
415
+        private async UniTask LoadDependenciesAssetBundleAsync(string assetBundleName)
421 416
         {
422 417
 #if UNITY_EDITOR
423 418
             if (AssetConfig.RuntimeMode != UpdateMode.Editor)
424 419
             {
425
-                yield return LoadAssetBundleManifestAsync();
420
+                await LoadAssetBundleManifestAsync();
426 421
                 if (AssetBundleManifest != null)
427 422
                 {
428 423
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
@@ -431,27 +426,24 @@ namespace TFramework
431 426
                         if (AssetBundles.ContainsKey(item))
432 427
                             continue;
433 428
 
434
-                        yield return LoadAssetBundleAsync(item, null);
429
+                       await LoadAssetBundleAsync(item, null);
435 430
                     }
436 431
                 }
437 432
             }
438 433
 #else
439
-                yield return LoadAssetBundleManifestAsync();
434
+                await LoadAssetBundleManifestAsync();
440 435
                 if (AssetBundleManifest != null)
441 436
                 {
442 437
                     string[] dependencies = AssetBundleManifest.GetAllDependencies(assetBundleName);
443 438
                     foreach (string item in dependencies)
444 439
                     {
445 440
                         if (AssetBundles.ContainsKey(item))
446
-                        {
447 441
                             continue;
448
-                        }
449 442
 
450
-                        yield return LoadAssetBundleAsync(item,null);
443
+                       await LoadAssetBundleAsync(item, null);
451 444
                     }
452 445
                 }
453 446
 #endif
454
-            yield return null;
455 447
         }
456 448
     }
457 449
 }