diff --git a/Assets/YooAsset/Runtime/InitializeParameters.cs b/Assets/YooAsset/Runtime/InitializeParameters.cs
index 5818df7f..7f7a1d92 100644
--- a/Assets/YooAsset/Runtime/InitializeParameters.cs
+++ b/Assets/YooAsset/Runtime/InitializeParameters.cs
@@ -42,6 +42,11 @@ namespace YooAsset
/// 同时加载Bundle文件的最大并发数
///
public int BundleLoadingMaxConcurrency = int.MaxValue;
+
+ ///
+ /// WebGL平台强制同步加载资源对象
+ ///
+ public bool WebGLForceSyncLoadAsset = false;
}
///
diff --git a/Assets/YooAsset/Runtime/OperationSystem/AsyncOperationBase.cs b/Assets/YooAsset/Runtime/OperationSystem/AsyncOperationBase.cs
index 4ffc489f..793ffca8 100644
--- a/Assets/YooAsset/Runtime/OperationSystem/AsyncOperationBase.cs
+++ b/Assets/YooAsset/Runtime/OperationSystem/AsyncOperationBase.cs
@@ -260,8 +260,11 @@ namespace YooAsset
StartOperation();
}
- IsWaitForAsyncComplete = true;
- InternalWaitForAsyncComplete();
+ if (IsWaitForAsyncComplete == false)
+ {
+ IsWaitForAsyncComplete = true;
+ InternalWaitForAsyncComplete();
+ }
}
#region 调试信息
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
index d5837ade..c23d0e9b 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Operation/Internal/LoadBundleFileOperation.cs
@@ -14,7 +14,7 @@ namespace YooAsset
Done,
}
- private readonly ResourceManager _resourceManager;
+ private readonly ResourceManager _resManager;
private readonly List _providers = new List(100);
private readonly List _removeList = new List(100);
private FSLoadBundleOperation _loadBundleOp;
@@ -53,7 +53,7 @@ namespace YooAsset
internal LoadBundleFileOperation(ResourceManager resourceManager, BundleInfo bundleInfo)
{
- _resourceManager = resourceManager;
+ _resManager = resourceManager;
LoadBundleInfo = bundleInfo;
}
internal override void InternalStart()
@@ -73,7 +73,7 @@ namespace YooAsset
}
else
{
- if (_resourceManager.BundleLoadingIsBusy())
+ if (_resManager.BundleLoadingIsBusy())
return;
_steps = ESteps.LoadBundleFile;
}
@@ -83,7 +83,7 @@ namespace YooAsset
{
if (_loadBundleOp == null)
{
- _resourceManager.BundleLoadingCounter++;
+ _resManager.BundleLoadingCounter++;
_loadBundleOp = LoadBundleInfo.LoadBundleFile();
_loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp);
@@ -121,7 +121,7 @@ namespace YooAsset
}
// 统计计数减少
- _resourceManager.BundleLoadingCounter--;
+ _resManager.BundleLoadingCounter--;
}
}
internal override void InternalWaitForAsyncComplete()
@@ -191,7 +191,7 @@ namespace YooAsset
{
foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
{
- if (_resourceManager.CheckBundleDestroyed(bundleID) == false)
+ if (_resManager.CheckBundleDestroyed(bundleID) == false)
return false;
}
}
@@ -233,7 +233,7 @@ namespace YooAsset
// 移除资源提供者
if (_removeList.Count > 0)
{
- _resourceManager.RemoveBundleProviders(_removeList);
+ _resManager.RemoveBundleProviders(_removeList);
_removeList.Clear();
}
}
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs
index bc288158..cc8d4ae2 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AllAssetsProvider.cs
@@ -15,6 +15,11 @@ namespace YooAsset
_loadAllAssetsOp = BundleResultObject.LoadAllAssetsAsync(MainAssetInfo);
_loadAllAssetsOp.StartOperation();
AddChildOperation(_loadAllAssetsOp);
+
+#if UNITY_WEBGL
+ if (_resManager.WebGLForceSyncLoadAsset())
+ _loadAllAssetsOp.WaitForAsyncComplete();
+#endif
}
if (IsWaitForAsyncComplete)
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs
index 3c96d784..8e716a47 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/AssetProvider.cs
@@ -15,6 +15,11 @@ namespace YooAsset
_loadAssetOp = BundleResultObject.LoadAssetAsync(MainAssetInfo);
_loadAssetOp.StartOperation();
AddChildOperation(_loadAssetOp);
+
+#if UNITY_WEBGL
+ if (_resManager.WebGLForceSyncLoadAsset())
+ _loadAssetOp.WaitForAsyncComplete();
+#endif
}
if (IsWaitForAsyncComplete)
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
index ee81fb6f..ee3fedd9 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/ProviderOperation.cs
@@ -68,13 +68,14 @@ namespace YooAsset
private ESteps _steps = ESteps.None;
+ protected readonly ResourceManager _resManager;
private readonly LoadBundleFileOperation _mainBundleLoader;
private readonly List _bundleLoaders = new List(10);
private readonly HashSet _handles = new HashSet();
-
public ProviderOperation(ResourceManager manager, string providerGUID, AssetInfo assetInfo)
{
+ _resManager = manager;
ProviderGUID = providerGUID;
MainAssetInfo = assetInfo;
diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs
index 8d512620..5127c047 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/SubAssetsProvider.cs
@@ -15,6 +15,11 @@ namespace YooAsset
_loadSubAssetsOp = BundleResultObject.LoadSubAssetsAsync(MainAssetInfo);
_loadSubAssetsOp.StartOperation();
AddChildOperation(_loadSubAssetsOp);
+
+#if UNITY_WEBGL
+ if (_resManager.WebGLForceSyncLoadAsset())
+ _loadSubAssetsOp.WaitForAsyncComplete();
+#endif
}
if (IsWaitForAsyncComplete)
diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
index bf386dcd..1b36583d 100644
--- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
+++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs
@@ -15,6 +15,7 @@ namespace YooAsset
private long _sceneCreateIndex = 0;
private IBundleQuery _bundleQuery;
private int _bundleLoadingMaxConcurrency;
+ private bool _webGLForceSyncLoadAsset;
///
/// 所属包裹
@@ -43,6 +44,7 @@ namespace YooAsset
public void Initialize(InitializeParameters parameters, IBundleQuery bundleServices)
{
_bundleLoadingMaxConcurrency = parameters.BundleLoadingMaxConcurrency;
+ _webGLForceSyncLoadAsset = parameters.WebGLForceSyncLoadAsset;
_bundleQuery = bundleServices;
SceneManager.sceneUnloaded += OnSceneUnloaded;
}
@@ -321,6 +323,10 @@ namespace YooAsset
{
return BundleLoadingCounter >= _bundleLoadingMaxConcurrency;
}
+ internal bool WebGLForceSyncLoadAsset()
+ {
+ return _webGLForceSyncLoadAsset;
+ }
private LoadBundleFileOperation CreateBundleFileLoaderInternal(BundleInfo bundleInfo)
{