Unity3D 使用 WWW 加載場景並顯示進度條(借鑑大神,僅做爲筆記用)

Unity3D 加載場景有不少種方式,作一些小的 DEMO 的時候每每是直接使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函數加載場景,具體可查看(http://www.xuanyusong.com/archives/1427),可是這種辦法不適合在真正的 Unity3D 開發中,由於前一種須要把全部的場景都打包,這在某些狀況下是不現實的,好比開發頁遊,咱們不可能把全部的場景都打包讓用戶下載,咱們須要一個場景一個場景的加載,這時候咱們能夠使用 WWW 先經過 HTTP 加載場景到本地緩存,而後再使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函數加載場景,使用這種加載方式,不只不須要 Build Settings -> Add Current 處理加載場景,進度條的顯示也更加容易,可是使用這種方式,須要先把場景打包成 unity3d(查看詳情) 或者 assetbundle(查看詳情) 文件。緩存

先把測試場景搭建好,如圖:dom

 

 

 而後添加一個 C# 腳本,取名 UseWww.cs,所有代碼以下:ide

using UnityEngine;
using System.Collections;
public class UseWww : MonoBehaviour
{
public UISlider progressBar;
public UILabel lblStatus;
private WWW www;
private string scenePath;
void Awake()
{
this.scenePath = "file:///" + Application.dataPath + "/Assets/MainScene.unity3d";
// 開始加載場景
this.StartCoroutine (this.BeginLoader ());
}
void Update()
{
if (this.www != null && this.progressBar != null && !this.www.isDone)
{
// 更新進度
this.progressBar.value = this.www.progress;
}
}
private IEnumerator BeginLoader()
{
this.lblStatus.text = "場景加載中,請稍候。。。";
// 加載場景使用 WWW.LoadFromCacheOrDownload,函數,這樣加載完成才能使用 Application.LoadLevel 或者 Application.LoadLevelAsync
this.www = WWW.LoadFromCacheOrDownload (scenePath, Random.Range(0, 100));
yield return this.www;
if(!string.IsNullOrEmpty(this.www.error))
{
this.lblStatus.text = "場景加載出錯!";
}
if (this.www.isDone)
{
this.lblStatus.text = "場景正在初始化,請等待。。。";
Application.LoadLevelAsync("MainScene");
}
}
}函數

而後把這個腳本掛載到遊戲場景的一個對象中,設置好相關屬性,如圖:測試

 

 運行咱們的遊戲,能夠查看進度條的加載狀況,當加載完成,自動跳轉到下一個場景中,如圖:ui

 

 

 

 

相關文章
相關標籤/搜索