@@ -475,25 +475,44 @@ public void Preload(Action<float> progressCallback)
475
475
//资源预加载
476
476
private IEnumerator ResourcePreload ( List < AssetHashInfo > preloadAsset , Action < float > progressCallback )
477
477
{
478
+ // Application.backgroundLoadingPriority = ThreadPriority.High;
478
479
float loadTime = Time . realtimeSinceStartup ;
479
480
_preloadAssets . Clear ( ) ;
480
481
float progressCount = 0 ;
481
482
foreach ( var item in preloadAsset )
482
483
{
483
484
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
+
485
504
var abRequest = ab . LoadAllAssetsAsync ( ) ;
486
505
while ( ! abRequest . isDone )
487
506
{
488
- float progress = ( abRequest . progress + progressCount ) / preloadAsset . Count ;
489
- progressCallback ? . Invoke ( progress ) ;
507
+ progressCallback ? . Invoke ( GetPreloadProgress ( 0.3f , abRequest . progress , progressCount , preloadAsset . Count ) ) ;
490
508
yield return null ;
491
509
}
492
510
List < string > assetNames = new List < string > ( ) ;
493
511
assetNames . AddRange ( ab . GetAllAssetNames ( ) ) ;
494
512
for ( int i = 0 ; i < abRequest . allAssets . Length ; i ++ )
495
513
{
496
-
514
+ progressCallback ? . Invoke ( GetPreloadProgress ( 0.6f , i / ( float ) ( abRequest . allAssets . Length - 1 ) , progressCount , preloadAsset . Count ) ) ;
515
+
497
516
Object asset = abRequest . allAssets [ i ] ;
498
517
string assetName = asset . name . ToLower ( ) ;
499
518
bool result = false ;
@@ -528,8 +547,15 @@ private IEnumerator ResourcePreload(List<AssetHashInfo> preloadAsset, Action<flo
528
547
progressCallback ? . Invoke ( 1.0f ) ;
529
548
}
530
549
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
+ }
531
557
532
- #endregion
558
+ #endregion
533
559
534
- }
560
+ }
535
561
}
0 commit comments