Unity3D 異步加載 在 場景加載 中的使用


異步加載

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

    
}       

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM