/// <summary> /// 缓存 /// </summary> /// <returns></returns> private IEnumerator Worker_Caching() { double cachingTime = DateTime.Now.Ticks; double linghtingEffectPartTime = DateTime.Now.Ticks; double SkinPartTime = DateTime.Now.Ticks; int cachingLoadingPart = 0; //是否超过了服务器设定的时间 bool isOverServerTime = false; //第一优先级 SkinManager.StartPreWarmSkin_FirstPart(); while (!SkinManager.IsSkinPreWarmFinish_FirstPart()) { yield return(endofframe); } SkinPartTime = DateTime.Now.Ticks - SkinPartTime; Debug.Log("皮肤缓存第一阶段耗时:" + GameUtil.TicksToSecond(SkinPartTime)); currentLoadingTime += GameUtil.TicksToSecond(SkinPartTime); isOverServerTime = currentLoadingTime >= serverWaitngTime; linghtingEffectPartTime = DateTime.Now.Ticks; LightingEffectFactory.Instance.CacheEffectsWhenLoadingScene_FirstPart(); while (!LightingEffectFactory.Instance.isCachEffectsFinish_FirstPart()) { yield return(endofframe); } linghtingEffectPartTime = DateTime.Now.Ticks - linghtingEffectPartTime; Debug.Log("光效缓存第一阶段耗时:" + GameUtil.TicksToSecond(linghtingEffectPartTime)); currentLoadingTime += GameUtil.TicksToSecond(linghtingEffectPartTime); AdvanceProgress(55); if (GameUtil.TicksToSecond(linghtingEffectPartTime + SkinPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; if ((serverWaitngTime - currentLoadingTime) > 40) { cachingLoadingPart = 1; SkinPartTime = DateTime.Now.Ticks; SkinManager.StartPreWarmSkin_SecondPart(); while (!SkinManager.IsSkinPreWarmFinish_SecondPart()) { yield return(endofframe); } SkinPartTime = DateTime.Now.Ticks - SkinPartTime; Debug.Log("皮肤缓存第二阶段耗时:" + GameUtil.TicksToSecond(SkinPartTime)); currentLoadingTime += GameUtil.TicksToSecond(SkinPartTime); AdvanceProgress(60); if (GameUtil.TicksToSecond(SkinPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; linghtingEffectPartTime = DateTime.Now.Ticks; LightingEffectFactory.Instance.CacheEffectsWhenLoadingScene_SecondPart(); while (!LightingEffectFactory.Instance.isCachEffectsFinish_SecondPart()) { yield return(endofframe); } linghtingEffectPartTime = DateTime.Now.Ticks - linghtingEffectPartTime; Debug.Log("光效缓存第二阶段耗时:" + GameUtil.TicksToSecond(linghtingEffectPartTime)); currentLoadingTime += GameUtil.TicksToSecond(linghtingEffectPartTime); AdvanceProgress(65); if (GameUtil.TicksToSecond(linghtingEffectPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; } if (cachingLoadingPart >= 1) { /*看下时间够,耗时小于30,可以进行第三优先级操作*/ if ((serverWaitngTime - currentLoadingTime) > 25) { cachingLoadingPart = 2; SkinPartTime = DateTime.Now.Ticks; SkinManager.StartPreWarmSkin_ThirdPart(); while (!SkinManager.IsSkinPreWarmFinish_ThirdPart()) { yield return(endofframe); } SkinPartTime = DateTime.Now.Ticks - SkinPartTime; Debug.Log("皮肤缓存第三阶段耗时:" + GameUtil.TicksToSecond(SkinPartTime)); currentLoadingTime += GameUtil.TicksToSecond(SkinPartTime); AdvanceProgress(70); if (GameUtil.TicksToSecond(SkinPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; linghtingEffectPartTime = DateTime.Now.Ticks; LightingEffectFactory.Instance.CacheEffectsWhenLoadingScene_ThridPart(); while (!LightingEffectFactory.Instance.isCachEffectsFinish_ThridPart()) { yield return(endofframe); } linghtingEffectPartTime = DateTime.Now.Ticks - linghtingEffectPartTime; currentLoadingTime += GameUtil.TicksToSecond(linghtingEffectPartTime); Debug.Log("光效缓存第三阶段耗时:" + GameUtil.TicksToSecond(linghtingEffectPartTime)); AdvanceProgress(75); if (GameUtil.TicksToSecond(linghtingEffectPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; } } if (cachingLoadingPart >= 2) { /*看下时间够,可以进行第四优先级操作*/ if ((serverWaitngTime - currentLoadingTime) > 10) { cachingLoadingPart = 3; SkinPartTime = DateTime.Now.Ticks; SkinManager.StartPreWarmSkin_FourPart(); while (!SkinManager.IsSkinPreWarmFinish_FourPart()) { yield return(endofframe); } SkinPartTime = DateTime.Now.Ticks - SkinPartTime; Debug.Log("皮肤缓存第四阶段耗时:" + GameUtil.TicksToSecond(SkinPartTime)); currentLoadingTime += GameUtil.TicksToSecond(SkinPartTime); AdvanceProgress(80); if (GameUtil.TicksToSecond(SkinPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; linghtingEffectPartTime = DateTime.Now.Ticks; LightingEffectFactory.Instance.CacheEffectsWhenLoadingScene_FourPart(); while (!LightingEffectFactory.Instance.isCachEffectsFinish_FourPart()) { yield return(endofframe); } linghtingEffectPartTime = DateTime.Now.Ticks - linghtingEffectPartTime; Debug.Log("光效缓存第四阶段耗时:" + GameUtil.TicksToSecond(linghtingEffectPartTime)); currentLoadingTime += GameUtil.TicksToSecond(linghtingEffectPartTime); AdvanceProgress(85); if (GameUtil.TicksToSecond(linghtingEffectPartTime) > 5.0f) { //加载完成之后,等0.5秒,等帧数稳定,并且更新加载进度 yield return(new WaitForSeconds(0.5f)); currentLoadingTime += 0.5f; } isOverServerTime = currentLoadingTime >= serverWaitngTime; } } linghtingEffectPartTime = DateTime.Now.Ticks; LightingEffectFactory.Instance.ActiveCacheRendering(); //渲染1.0s yield return(new WaitForSeconds(1.0f)); currentLoadingTime++; isOverServerTime = currentLoadingTime >= serverWaitngTime; LightingEffectFactory.Instance.InvActiveCacheRendering(); SkinManager.EndPreWarmSkin(); SkinManager.ClearCacheSkinID(); LightingEffectFactory.Instance.ClearAllPreWarmData(); cachingTime = DateTime.Now.Ticks - cachingTime; cachingTime *= 0.0000001f; Debug.Log("缓存完毕,耗时:" + cachingTime + ",总耗时:" + currentLoadingTime); }