Skip to content

Commit 1d8288e

Browse files
author
wanderer
committed
预加载的AssetBundle的加载, 也改为异步加载
1 parent 5c4a94e commit 1d8288e

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

GameFramework/Runtime/Resource/BundleResourceHelper.cs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -475,25 +475,44 @@ public void Preload(Action<float> progressCallback)
475475
//资源预加载
476476
private IEnumerator ResourcePreload(List<AssetHashInfo> preloadAsset, Action<float> progressCallback)
477477
{
478+
// Application.backgroundLoadingPriority = ThreadPriority.High;
478479
float loadTime = Time.realtimeSinceStartup;
479480
_preloadAssets.Clear();
480481
float progressCount = 0;
481482
foreach (var item in preloadAsset)
482483
{
483484
yield return null;
484-
var ab = LoadAssetBundle(item.Name);
485+
// var ab = LoadAssetBundle(item.Name);
486+
AssetBundle ab = null;
487+
string abPath = Path.Combine(_readPath, item.Name);
488+
using (var stream = new EncryptFileStream(abPath, FileMode.Open, FileAccess.Read, FileShare.None, 1024 * 4, false))
489+
{
490+
var ablfsa = AssetBundle.LoadFromStreamAsync(stream);
491+
while (!ablfsa.isDone)
492+
{
493+
progressCallback?.Invoke(GetPreloadProgress(0, ablfsa.progress, progressCount, preloadAsset.Count));
494+
yield return null;
495+
}
496+
yield return null;
497+
ab = ablfsa.assetBundle;
498+
}
499+
//存储assetbundle
500+
_liveAssetBundle[item.Name] = ab;
501+
//assetbundle 引用计数
502+
_assetBundleReferenceCount[ab] = 0;
503+
485504
var abRequest = ab.LoadAllAssetsAsync();
486505
while (!abRequest.isDone)
487506
{
488-
float progress = (abRequest.progress+ progressCount )/preloadAsset.Count;
489-
progressCallback?.Invoke(progress);
507+
progressCallback?.Invoke(GetPreloadProgress(0.3f, abRequest.progress, progressCount, preloadAsset.Count));
490508
yield return null;
491509
}
492510
List<string> assetNames = new List<string>();
493511
assetNames.AddRange(ab.GetAllAssetNames());
494512
for (int i = 0; i < abRequest.allAssets.Length; i++)
495513
{
496-
514+
progressCallback?.Invoke(GetPreloadProgress(0.6f, i/(float)(abRequest.allAssets.Length-1), progressCount, preloadAsset.Count));
515+
497516
Object asset = abRequest.allAssets[i];
498517
string assetName = asset.name.ToLower();
499518
bool result = false;
@@ -528,8 +547,15 @@ private IEnumerator ResourcePreload(List<AssetHashInfo> preloadAsset, Action<flo
528547
progressCallback?.Invoke(1.0f);
529548
}
530549

550+
//获取预加载的进度
551+
private float GetPreloadProgress(float startProgress,float progress,float progressIndex,int progressCount)
552+
{
553+
progress = (startProgress + 0.3f * progress + progressIndex) / progressCount;
554+
progress = Mathf.Clamp(progress, 0.0f, 0.995f);
555+
return progress;
556+
}
531557

532-
#endregion
558+
#endregion
533559

534-
}
560+
}
535561
}

0 commit comments

Comments
 (0)