异步加载
我们想一想玩过的一些游戏,基本都会有加载界面——因为游戏场景数据较大,所以需要加载一小段时间。那为什么一些2D游戏也会有加载界面呢?按理说2D游戏场景会很小,这样做是为了让游戏跑在低端设备上时,有更好的体验。
当我们在开发一些3D游戏的时候,一般情况下在跳转场景时都要提前加载场景资源。以下我通过举例来说说异步加载。
1.首先在建立两个场景。在第一个场景中创建一个进度条(Slider),在第二个场景中创建一个三维物体。
2.然后创建一个脚本,挂载在新创建的进度条(Slider)上。
3.然后接下来看代码。
// 其他的头文件省略 using UnityEngine.UI; // 引入头文件 public class Loading_scene : MonoBehaviour { private Slider Slider; // 进度条 private AsyncOperation asyncOperation; public Text Pecentage_Text; // 显示进度的文本 void Awake() { // 将自身对象的slider组件给Slider 属性 slider = gameObject.GetComponent<Slider>(); } private void Start() { StartCoroutine("LoadScene", Scene_name); // 开启协程 } IEnumerator LoadScene(string Scene_name) // 通过协程加载场景 { asyncOperation = SceneManager.LoadSceneAsync(Scene_name);//异步跳转到Scene_name场景 asyncOperation.allowSceneActivation = false;//当game场景加载到90%时,不让它直接跳转到game场景。 yield return asyncOperation; } void Update() { if (asyncOperation == null) { return; } int progressVaule = 0; if (asyncOperation.progress < 0.9f) { progressVaule = (int)asyncOperation.progress * 100; } else { progressVaule = 1000; } if (curProgressVaule < progressVaule) { curProgressVaule+=2; } Pecentage_Text.text = curProgressVaule /10+ "%"; Slider .value = curProgressVaule / 1000f; if (curProgressVaule == 1000) { asyncOperation.allowSceneActivation = true; } } }