unity3D AsyncOperation异步加载场景&百分比效果

 1 using System.Collections;
 2 using UnityEngine;
 3 using UnityEngine.SceneManagement;
 4 using UnityEngine.UI;
 5 
 6 public class LoadAwait : MonoBehaviour
 7 {
 8     public GameObject loadPanel; //载入面板
 9     public Slider slider;//滑动条
10     public Text loadMsg;//载入提示信息
11     public GameObject UI_One;
12     public GameObject UI_Two;
13 
14     public void LoadNextScence()
15     {
16         StartCoroutine(LoadScence());
17     }
18     
19     IEnumerator LoadScence()
20     {
21         UI_One.gameObject.SetActive(false);//对象UI1,没有可忽视
22         UI_Two.gameObject.SetActive(true);//对象UI界面2,没有可忽视
23 
24         //显示载入界面
25         loadPanel.SetActive(true);
26 
27         //创建异步操作
28         AsyncOperation op = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
29 
30         //禁止激活下一个场景
31         op.allowSceneActivation = false;
32 
33         //如果没有加载完毕
34         while (!op.isDone)
35         {
36             //赋值0-1
37             slider.value = op.progress;
38 
39             //显示百分比
40             loadMsg.text = op.progress * 100 + "%";
41 
42             //大于等于0.9表示加载完毕
43             if (op.progress >= 0.9f)
44             {
45                 //直接修改值为1,表示100%
46                 slider.value = 1;
47 
48                 //修改提示内容
49                 loadMsg.text = "请按下任意按键,进入游戏!";
50 
51                 //判断按下任意按键时
52                 if (Input.anyKeyDown)
53                 {
54                     //加载下一个场景
55                     op.allowSceneActivation = true;
56                 }
57 
58             }
59 
60             //退出,返回空
61             yield return null;
62 
63         }
64     }
65 }
View Code

将代码挂载到画布下任意一个对象上,假设为空对象LoadManger

可以忽视UI_One和UI_Two

将对应的功能对象拖入公开变量

给进入游戏按钮添加事件,将LoadManger拖入,选择LoadNextScence()

 

 效果

posted @ 2021-05-06 22:07  伊凡晴天  阅读(565)  评论(0编辑  收藏  举报