異步加載
我們想一想玩過的一些游戲,基本都會有加載界面——因為游戲場景數據較大,所以需要加載一小段時間。那為什么一些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; } } }
