您当前的位置: 首页 >  unity

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

unity用 AsyncOperation 实现异步加载场景的slider进度条面板

Peter_Gao_ 发布时间:2020-06-18 19:07:06 ,浏览量:0

 

public class AsyncLoadScene : BaseUIForm {     private const string NAME = "AsyncLoadScene";

    /// 通常的进度条     public Slider loadingSlider;     //public Text Tips;     public Text loadingText;

    public Canvas canvas;

    private int displayProgress;     private int toProgress;

    AsyncOperation operation;

    private void Start()     {         operation = null;         InitScene();

        if (SceneManager.GetActiveScene().name == "LoadingScene")         {             //启动协程               StartCoroutine(AsyncLoading());         }

    }     #region 额外的初始化     protected override void Initialization()     {         MsgTypeName = NAME;         CurrentUIType.UIForms_LucencyType = UIFormLucenyType.DnotMask;     }

    // 背景图随机2选1     protected override void InitUIInfo()     {         int BgSignal=Random.Range(1,3);         this.SetSprite(Managers.AtlasType.GeneralUI, "LoadScene_bg" + BgSignal);     }      

      /// 初始化场景     void InitScene()     {         loadingSlider.value = 0;         loadingSlider.maxValue = 100;

        loadingSlider.gameObject.SetActive(true);         GetComponent().color = new Color(1, 1, 1, 1);         switch (Globe.LoadingSceneKind)         {             case LoadingKind.InitGame:                 {                     m_LaodGameMap.gameObject.SetActive(false);                 }                 break;             case LoadingKind.BattleScene:                 {                     m_LaodGameMap.gameObject.SetActive(false);                 }                 break;         }     }

    /// 异步加载     private IEnumerator AsyncLoading()     {         TipsInfo.text = Globe.nextSceneName;         operation = SceneManager.LoadSceneAsync(Globe.nextSceneName);         operation.allowSceneActivation = false;             while (operation.progress < 0.9f)             {                 // 获取真实的加载进度                 toProgress = (int)(operation.progress * 100);                 // 让进度条滑动更平滑                 while (displayProgress < toProgress)                 {                     ++displayProgress;                     SetLoadingPercentage(displayProgress);                     yield return new WaitForEndOfFrame();                 }

            }

            toProgress = 100;             StartCoroutine(LoadScene(operation));                 

    }

    IEnumerator LoadScene(AsyncOperation operation)     {         switch (Globe.LoadingSceneKind)         {             case LoadingKind.InitGame:                 {                     while (displayProgress < toProgress)                     {                         ++displayProgress;                         SetLoadingPercentage(displayProgress);                         yield return new WaitForEndOfFrame();                     }                     //operation.allowSceneActivation = true;

                    // 后台异步加载完成后暂停切换场景,按任何键继续切换                     StartCoroutine(PauseSwitchScene());                 }                 break;             case LoadingKind.BattleScene:                 {                                         // 继续加载剩余部分                     while (displayProgress < toProgress)                     {                         ++displayProgress;                         SetLoadingPercentage(displayProgress);                         //yield return new WaitForEndOfFrame();                         yield return null;                     }

                    // 后台异步加载完成后暂停切换场景,按任何键继续切换                     StartCoroutine(PauseSwitchScene());                                     }                 break;

                    }

                    }

    public void ShowScene()     {         UIFORM.Globe.ShowAllUI();     }

 

    /// 设置通常的加载信息     private void SetLoadingPercentage(int Percentage)     {         loadingSlider.value = Percentage;         loadingText.text = Percentage + "%";     }     /// 设置游戏地图的加载信息     private void SetLoadingGameMapPercentage(int Percentage)     {         LoadingGameMapSlider.value = Percentage;         LoadingTextGameMap.text = "生成地图中..."+Percentage + "%";     }

    /// 后台异步加载完成后暂停切换场景,按任何键继续切换     private IEnumerator PauseSwitchScene()     {         bool IsGoOn = false;         while (!IsGoOn)         {             if (displayProgress >= 90)             {                 loadingText.text = "按任意键继续";                 if (Input.anyKeyDown)                 {                     IsGoOn = true;                     operation.allowSceneActivation = true;                 }             }             yield return null;         }

    } }

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0385s