update resource manager

新增初始化参数:WebGLForceSyncLoadAsset
This commit is contained in:
何冠峰
2025-06-18 11:12:42 +08:00
parent 9ed85afb29
commit 6c98f9a09d
8 changed files with 40 additions and 10 deletions

View File

@@ -42,6 +42,11 @@ namespace YooAsset
/// 同时加载Bundle文件的最大并发数 /// 同时加载Bundle文件的最大并发数
/// </summary> /// </summary>
public int BundleLoadingMaxConcurrency = int.MaxValue; public int BundleLoadingMaxConcurrency = int.MaxValue;
/// <summary>
/// WebGL平台强制同步加载资源对象
/// </summary>
public bool WebGLForceSyncLoadAsset = false;
} }
/// <summary> /// <summary>

View File

@@ -260,8 +260,11 @@ namespace YooAsset
StartOperation(); StartOperation();
} }
IsWaitForAsyncComplete = true; if (IsWaitForAsyncComplete == false)
InternalWaitForAsyncComplete(); {
IsWaitForAsyncComplete = true;
InternalWaitForAsyncComplete();
}
} }
#region #region

View File

@@ -14,7 +14,7 @@ namespace YooAsset
Done, Done,
} }
private readonly ResourceManager _resourceManager; private readonly ResourceManager _resManager;
private readonly List<ProviderOperation> _providers = new List<ProviderOperation>(100); private readonly List<ProviderOperation> _providers = new List<ProviderOperation>(100);
private readonly List<ProviderOperation> _removeList = new List<ProviderOperation>(100); private readonly List<ProviderOperation> _removeList = new List<ProviderOperation>(100);
private FSLoadBundleOperation _loadBundleOp; private FSLoadBundleOperation _loadBundleOp;
@@ -53,7 +53,7 @@ namespace YooAsset
internal LoadBundleFileOperation(ResourceManager resourceManager, BundleInfo bundleInfo) internal LoadBundleFileOperation(ResourceManager resourceManager, BundleInfo bundleInfo)
{ {
_resourceManager = resourceManager; _resManager = resourceManager;
LoadBundleInfo = bundleInfo; LoadBundleInfo = bundleInfo;
} }
internal override void InternalStart() internal override void InternalStart()
@@ -73,7 +73,7 @@ namespace YooAsset
} }
else else
{ {
if (_resourceManager.BundleLoadingIsBusy()) if (_resManager.BundleLoadingIsBusy())
return; return;
_steps = ESteps.LoadBundleFile; _steps = ESteps.LoadBundleFile;
} }
@@ -83,7 +83,7 @@ namespace YooAsset
{ {
if (_loadBundleOp == null) if (_loadBundleOp == null)
{ {
_resourceManager.BundleLoadingCounter++; _resManager.BundleLoadingCounter++;
_loadBundleOp = LoadBundleInfo.LoadBundleFile(); _loadBundleOp = LoadBundleInfo.LoadBundleFile();
_loadBundleOp.StartOperation(); _loadBundleOp.StartOperation();
AddChildOperation(_loadBundleOp); AddChildOperation(_loadBundleOp);
@@ -121,7 +121,7 @@ namespace YooAsset
} }
// 统计计数减少 // 统计计数减少
_resourceManager.BundleLoadingCounter--; _resManager.BundleLoadingCounter--;
} }
} }
internal override void InternalWaitForAsyncComplete() internal override void InternalWaitForAsyncComplete()
@@ -191,7 +191,7 @@ namespace YooAsset
{ {
foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs) foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
{ {
if (_resourceManager.CheckBundleDestroyed(bundleID) == false) if (_resManager.CheckBundleDestroyed(bundleID) == false)
return false; return false;
} }
} }
@@ -233,7 +233,7 @@ namespace YooAsset
// 移除资源提供者 // 移除资源提供者
if (_removeList.Count > 0) if (_removeList.Count > 0)
{ {
_resourceManager.RemoveBundleProviders(_removeList); _resManager.RemoveBundleProviders(_removeList);
_removeList.Clear(); _removeList.Clear();
} }
} }

View File

@@ -15,6 +15,11 @@ namespace YooAsset
_loadAllAssetsOp = BundleResultObject.LoadAllAssetsAsync(MainAssetInfo); _loadAllAssetsOp = BundleResultObject.LoadAllAssetsAsync(MainAssetInfo);
_loadAllAssetsOp.StartOperation(); _loadAllAssetsOp.StartOperation();
AddChildOperation(_loadAllAssetsOp); AddChildOperation(_loadAllAssetsOp);
#if UNITY_WEBGL
if (_resManager.WebGLForceSyncLoadAsset())
_loadAllAssetsOp.WaitForAsyncComplete();
#endif
} }
if (IsWaitForAsyncComplete) if (IsWaitForAsyncComplete)

View File

@@ -15,6 +15,11 @@ namespace YooAsset
_loadAssetOp = BundleResultObject.LoadAssetAsync(MainAssetInfo); _loadAssetOp = BundleResultObject.LoadAssetAsync(MainAssetInfo);
_loadAssetOp.StartOperation(); _loadAssetOp.StartOperation();
AddChildOperation(_loadAssetOp); AddChildOperation(_loadAssetOp);
#if UNITY_WEBGL
if (_resManager.WebGLForceSyncLoadAsset())
_loadAssetOp.WaitForAsyncComplete();
#endif
} }
if (IsWaitForAsyncComplete) if (IsWaitForAsyncComplete)

View File

@@ -68,13 +68,14 @@ namespace YooAsset
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
protected readonly ResourceManager _resManager;
private readonly LoadBundleFileOperation _mainBundleLoader; private readonly LoadBundleFileOperation _mainBundleLoader;
private readonly List<LoadBundleFileOperation> _bundleLoaders = new List<LoadBundleFileOperation>(10); private readonly List<LoadBundleFileOperation> _bundleLoaders = new List<LoadBundleFileOperation>(10);
private readonly HashSet<HandleBase> _handles = new HashSet<HandleBase>(); private readonly HashSet<HandleBase> _handles = new HashSet<HandleBase>();
public ProviderOperation(ResourceManager manager, string providerGUID, AssetInfo assetInfo) public ProviderOperation(ResourceManager manager, string providerGUID, AssetInfo assetInfo)
{ {
_resManager = manager;
ProviderGUID = providerGUID; ProviderGUID = providerGUID;
MainAssetInfo = assetInfo; MainAssetInfo = assetInfo;

View File

@@ -15,6 +15,11 @@ namespace YooAsset
_loadSubAssetsOp = BundleResultObject.LoadSubAssetsAsync(MainAssetInfo); _loadSubAssetsOp = BundleResultObject.LoadSubAssetsAsync(MainAssetInfo);
_loadSubAssetsOp.StartOperation(); _loadSubAssetsOp.StartOperation();
AddChildOperation(_loadSubAssetsOp); AddChildOperation(_loadSubAssetsOp);
#if UNITY_WEBGL
if (_resManager.WebGLForceSyncLoadAsset())
_loadSubAssetsOp.WaitForAsyncComplete();
#endif
} }
if (IsWaitForAsyncComplete) if (IsWaitForAsyncComplete)

View File

@@ -15,6 +15,7 @@ namespace YooAsset
private long _sceneCreateIndex = 0; private long _sceneCreateIndex = 0;
private IBundleQuery _bundleQuery; private IBundleQuery _bundleQuery;
private int _bundleLoadingMaxConcurrency; private int _bundleLoadingMaxConcurrency;
private bool _webGLForceSyncLoadAsset;
/// <summary> /// <summary>
/// 所属包裹 /// 所属包裹
@@ -43,6 +44,7 @@ namespace YooAsset
public void Initialize(InitializeParameters parameters, IBundleQuery bundleServices) public void Initialize(InitializeParameters parameters, IBundleQuery bundleServices)
{ {
_bundleLoadingMaxConcurrency = parameters.BundleLoadingMaxConcurrency; _bundleLoadingMaxConcurrency = parameters.BundleLoadingMaxConcurrency;
_webGLForceSyncLoadAsset = parameters.WebGLForceSyncLoadAsset;
_bundleQuery = bundleServices; _bundleQuery = bundleServices;
SceneManager.sceneUnloaded += OnSceneUnloaded; SceneManager.sceneUnloaded += OnSceneUnloaded;
} }
@@ -321,6 +323,10 @@ namespace YooAsset
{ {
return BundleLoadingCounter >= _bundleLoadingMaxConcurrency; return BundleLoadingCounter >= _bundleLoadingMaxConcurrency;
} }
internal bool WebGLForceSyncLoadAsset()
{
return _webGLForceSyncLoadAsset;
}
private LoadBundleFileOperation CreateBundleFileLoaderInternal(BundleInfo bundleInfo) private LoadBundleFileOperation CreateBundleFileLoaderInternal(BundleInfo bundleInfo)
{ {