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) {