|
@@ -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
|
}
|