Beispiel #1
0
    /// <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);
    }