public void PreloadSyncAndAsyncAssets(uint sceneId, ref PreloadResult preloadResult) { preloadSyncAndAsyncAssetsResult = preloadResult; IResBinData iResBinData = GameKernel.GetDataCenter().GetResBinData(); //预加载场景资源 }
//场景资源预加载 public void PreloadSceneAsset(string sceneName, ref PreloadResult preloadResult) { this.preloadSceneResult = preloadResult; //获取预加载的场景数据(现在木有,先不处理) List <string> preLoadGOList = null; if (preLoadGOList != null && preLoadGOList.Count > 0) { this.preloadSceneResult.TotalCount += preLoadGOList.Count; } if (this.preloadSceneResult.TotalCount > 0) { //资源加载并生成相应预设 if (preLoadGOList != null) { IResourceMgr resMgr = GameKernel.Get <IResourceMgr>(); foreach (string item in preLoadGOList) { AssetBundleParams abp = new AssetBundleParams(item, typeof(GameObject)); resMgr.LoadNormalObjAsync(abp); } } } else { this.preloadSceneResult = null; } }
//预加载普通资源 public void PreloadAsyncAssets(uint sceneId, ref PreloadResult preloadResult) { //初始化系统 preloadAsyncAssetsResult = preloadResult; IResBinData iResBinData = GameKernel.GetDataCenter().GetResBinData(); //预加载及预热资源 List <string> preLoadObjList = null; List <string> PreloadAndPrehotObjList = null; if (preLoadObjList != null && preLoadObjList.Count > 0) { preloadAsyncAssetsResult.TotalCount += preLoadObjList.Count; } if (PreloadAndPrehotObjList != null && PreloadAndPrehotObjList.Count > 0) { preloadAsyncAssetsResult.TotalCount += PreloadAndPrehotObjList.Count; } if (preloadAsyncAssetsResult.TotalCount > 0) { IResourceMgr resMgr = GameKernel.Get <IResourceMgr>(); /*if (preLoadObjList != null) * { * foreach (string item in preLoadObjList) * { * AssetBundleParams abp = * AssetBundleParamFactory.Create(item); * resMgr.LoadSceneResidentMemoryObjAsync(abp, preloadObjCallBack); * } * } * if (PreloadAndPrehotObjList != null) * { * foreach (string item in PreloadAndPrehotObjList) * { * AssetBundleParams abp = AssetBundleParamFactory.Create(item); * abp.IsPreloadMainAsset = true; * * ResLogger.Log("Prelaod " + abp.path + " " + abp.type); * * resMgr.LoadSceneResidentMemoryObjAsync(abp, preloadObjCallBack); * } * } * * for (int i = 0; i < diffPreloads.Count; i++) * { * if (!string.IsNullOrEmpty(diffPreloads[i])) * { * AssetBundleParams abp = AssetBundleParamFactory.Create(diffPreloads[i]); * abp.IsPreloadMainAsset = true; * * ResLogger.Log("Diff Prelaod " + abp.path + " " + abp.type); * * resMgr.LoadResidentMemoryObjAsync(abp, preloadObjCallBack); * } * }*/ } else { preloadAsyncAssetsResult = null; } }
void initAsset() { preloadResult = null; preloadResult = new PreloadResult(); GameKernel.CreateForInitData(); IResourceMgr resourceMgr = GameKernel.Get <IResourceMgr>(); ResBinData iResBinData = NewResBinDataForPreLoad(); //预加载资源,不需要提前获取mainAsset List <string> residentGoList = iResBinData.GetImmortalAssetList(1); List <string> residentACList = iResBinData.GetImmortalAssetList(3); List <string> residentTexture2DList = iResBinData.GetImmortalAssetList(5); List <string> residentAudioClipList = iResBinData.GetImmortalAssetList(7); List <string> residentAnimClipList = iResBinData.GetImmortalAssetList(9); //预加载资源,需要提前获取mainAsset List <string> residentPreloadGoList = iResBinData.GetImmortalAssetList(2); List <string> residentPreloadACList = iResBinData.GetImmortalAssetList(4); List <string> residentPreloadTexture2DList = iResBinData.GetImmortalAssetList(6); List <string> residentPreloadAudioClipList = iResBinData.GetImmortalAssetList(8); List <string> residentPreloadAnimClipList = iResBinData.GetImmortalAssetList(10); if (residentGoList != null && residentGoList.Count > 0) { this.preloadResult.TotalCount += residentGoList.Count; } if (residentPreloadGoList != null && residentPreloadGoList.Count > 0) { this.preloadResult.TotalCount += residentPreloadGoList.Count; } if (residentACList != null && residentACList.Count > 0) { this.preloadResult.TotalCount += residentACList.Count; } if (residentPreloadACList != null && residentPreloadACList.Count > 0) { this.preloadResult.TotalCount += residentPreloadACList.Count; } if (residentTexture2DList != null && residentTexture2DList.Count > 0) { this.preloadResult.TotalCount += residentTexture2DList.Count; } if (residentPreloadTexture2DList != null && residentPreloadTexture2DList.Count > 0) { this.preloadResult.TotalCount += residentPreloadTexture2DList.Count; } if (residentAudioClipList != null && residentAudioClipList.Count > 0) { this.preloadResult.TotalCount += residentAudioClipList.Count; } if (residentPreloadAudioClipList != null && residentPreloadAudioClipList.Count > 0) { this.preloadResult.TotalCount += residentPreloadAudioClipList.Count; } if (residentAnimClipList != null && residentAnimClipList.Count > 0) { this.preloadResult.TotalCount += residentAnimClipList.Count; } if (residentPreloadAnimClipList != null && residentPreloadAnimClipList.Count > 0) { this.preloadResult.TotalCount += residentPreloadAnimClipList.Count; } if (residentGoList != null) { for (int i = 0; i < residentGoList.Count; i++) { abp = new AssetBundleParams(residentGoList[i], typeof(GameObject)); resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentPreloadGoList != null) { for (int i = 0; i < residentPreloadGoList.Count; i++) { abp = new AssetBundleParams(residentPreloadGoList[i], typeof(GameObject)); abp.IsPreloadMainAsset = true; resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentACList != null) { for (int i = 0; i < residentACList.Count; i++) { abp = new AssetBundleParams(residentACList[i], typeof(RuntimeAnimatorController)); resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentPreloadACList != null) { for (int i = 0; i < residentPreloadACList.Count; i++) { abp = new AssetBundleParams(residentPreloadACList[i], typeof(RuntimeAnimatorController)); abp.IsPreloadMainAsset = true; resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentTexture2DList != null) { for (int i = 0; i < residentTexture2DList.Count; i++) { abp = new AssetBundleParams(residentTexture2DList[i], typeof(Texture2D)); resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentPreloadTexture2DList != null) { for (int i = 0; i < residentPreloadTexture2DList.Count; i++) { abp = new AssetBundleParams(residentPreloadTexture2DList[i], typeof(Texture2D)); abp.IsPreloadMainAsset = true; resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentAudioClipList != null) { for (int i = 0; i < residentAudioClipList.Count; i++) { abp = new AssetBundleParams(residentAudioClipList[i], typeof(AudioClip)); resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentPreloadAudioClipList != null) { for (int i = 0; i < residentPreloadAudioClipList.Count; i++) { abp = new AssetBundleParams(residentPreloadAudioClipList[i], typeof(AudioClip)); abp.IsPreloadMainAsset = true; resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentAnimClipList != null) { for (int i = 0; i < residentAnimClipList.Count; i++) { abp = new AssetBundleParams(residentAnimClipList[i], typeof(AnimationClip)); resourceMgr.LoadResidentMemoryObjAsync(abp); } } if (residentPreloadAnimClipList != null) { for (int i = 0; i < residentPreloadAnimClipList.Count; i++) { abp = new AssetBundleParams(residentPreloadAnimClipList[i], typeof(AnimationClip)); abp.IsPreloadMainAsset = true; resourceMgr.LoadResidentMemoryObjAsync(abp); } } ReleaseNewResBinData(); }
private IEnumerator StartLoadingCor() { XYHY.IResourceMgr resMgr = Framework.GameKernel.GetResourceMgr(); int displayProgress = 0; int toProgress = 0; int sceneLoadPercent = 20; int processSpeed = 4; TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreLoad); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreloadScene); int sceneAssetLoadPercent = 30; PreloadResult preloadSceneResult = new PreloadResult(); PreloadManager.Instance.PreloadSceneAsset(SceneMgr.Instance.CurrentScene, ref preloadSceneResult); if (preloadSceneResult != null && preloadSceneResult.TotalCount > 0) { while (true) { toProgress = (int)(preloadSceneResult.PreloadPercent * sceneLoadPercent); while (displayProgress < toProgress) { displayProgress += processSpeed; setLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame(); } if (preloadSceneResult.PreloadPercent >= 1 && toProgress == sceneLoadPercent) { break; } yield return null; } } preloadSceneResult = null; TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreloadScene,false); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreUnloadScn); //卸载场景物件 resMgr.UnloadLastSceneAsset(SceneMgr.Instance.CurrentScene); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreUnloadScn, false); //预加载异步资源 PreloadResult preloadAsyncAssetResult = new PreloadResult(); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreloadAsset); PreloadManager.Instance.PreloadAsyncAssets(SceneMgr.Instance.SceneId, ref preloadAsyncAssetResult); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreloadAsset,false); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreLoadAssetAsy); if (preloadAsyncAssetResult != null && preloadAsyncAssetResult.TotalCount > 0) { while (true) { toProgress = sceneLoadPercent + (int)(preloadAsyncAssetResult.PreloadPercent * sceneAssetLoadPercent); while (displayProgress < toProgress) { displayProgress += processSpeed; setLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame(); } if (preloadAsyncAssetResult.PreloadPercent >= 1 && toProgress == (sceneLoadPercent + sceneAssetLoadPercent)) { preloadAsyncAssetResult = null; break; } yield return null; } } TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreLoadAssetAsy,false); //预加载同时有同步和异步的资源 PreloadResult preloadSyncAndAsyncAssetsResult = new PreloadResult(); PreloadManager.Instance.PreloadSyncAndAsyncAssets(SceneMgr.Instance.SceneId, ref preloadSyncAndAsyncAssetsResult); TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreLoadSycAndAsy); if (preloadSyncAndAsyncAssetsResult != null && preloadSyncAndAsyncAssetsResult.TotalCount > 0) { while (true) { toProgress = sceneLoadPercent + sceneAssetLoadPercent + (int)(preloadSyncAndAsyncAssetsResult.PreloadPercent * (100 - sceneLoadPercent - sceneAssetLoadPercent)); while (displayProgress < toProgress) { displayProgress += processSpeed; setLoadingPercentage(displayProgress); yield return new WaitForEndOfFrame(); } if (preloadSyncAndAsyncAssetsResult.PreloadPercent >= 1 && toProgress == 100) { preloadSyncAndAsyncAssetsResult = null; break; } yield return null; } } TimeCostLog.Instance.WriteLog(SceneMgr.Instance.SceneId, eTimeCost.ePreLoadSycAndAsy,false); toProgress = 100; while (displayProgress < toProgress) { displayProgress += processSpeed; setLoadingPercentage(displayProgress); yield return null; } }