Unity中如何加载场景
1、首先需要将场景添加到 Build Settings中,如下图:
2、引用using UnityEngine.SceneManagement;
同步加载:如果场景很大,有可能会卡顿。
1 using UnityEngine;
2 using UnityEngine.SceneManagement;
3
4 public class TestA : MonoBehaviour
5 {
6 private void Start()
7 {
8 SceneManager.LoadScene("SceneName");
9 }
10 }
异步加载:
我们需要三个场景来完成异步加载,开始场景、过渡场景、目标场景,一般会在过渡场景来做个加载进度条。
假设我们现在有TestA、TestB、TestC三个场景,如何完成A到B到C的异步加载,并实现加载进度条呢?代码如下:****
在TestA场景中挂载脚本TestA
1 using UnityEngine;
2 using UnityEngine.SceneManagement;
3
4 public class TestA : MonoBehaviour
5 {
6 private void Start()
7 {
8 SceneManager.LoadSceneAsync("TestB");
9 }
10 }
在TestB场景中挂载脚本TestB
1 using System.Collections;
2 using UnityEngine;
3 using UnityEngine.SceneManagement;
4 using UnityEngine.UI;
5
6 public class TestB : MonoBehaviour
7 {
8 public Slider slider; //加载进度条
9 private AsyncOperation mAsyncOperation; //异步加载信息
10
11 private void Start()
12 {
13 StartCoroutine(LoadScene());
14 }
15 private void Update()
16 {
17 UpdateSlider();
18 }
19 /// <summary>
20 /// 异步加载场景
21 /// </summary>
22 /// <returns></returns>
23 IEnumerator LoadScene()
24 {
25 mAsyncOperation = SceneManager.LoadSceneAsync("TestC");
26 //不跳转场景,停留在当前场景
27 mAsyncOperation.allowSceneActivation = false;
28 yield return mAsyncOperation;
29 }
30 /// <summary>
31 /// 更新加载进度条
32 /// </summary>
33 private void UpdateSlider()
34 {
35 if (slider.value >= 1)
36 {
37 //跳转到目标场景
38 mAsyncOperation.allowSceneActivation = true;
39 return;
40 }
41 else if (slider.value >= 0.9f)
42 {
43 slider.value += Time.deltaTime;
44 return;
45 }
46 //mAsyncOperation.progress属性为场景加载进度,但是最大值为0.9f。
47 slider.value = mAsyncOperation.progress;
48
49 }
50 }
这样就可以完成异步加载,并实现加载进度条。
有两点需要注意:
1、mAsyncOperation.progress属性最大值为0.9f。
2、用mAsyncOperation.allowSceneActivation来控制什么时候跳转场景。
如果场景太小的,加载会非常快,进度条会一闪而过,所以进度条是否使用mAsyncOperation.progress属性的值,根据自己的需求来。****