Unity WebGL創建和加載 AssetBundle 場景

Unity中創建兩個場景

在Unity中創建一個主場景Main,一個測試場景CubeScene,在CubeScene場景中可隨意添加幾個物體,如下圖所示:
CubeScene

使用腳本創建AssetBundle

新建一個C#腳本,命名爲CreateAssetBundle.cs,代碼如下:

using UnityEngine;
using UnityEditor;

public class CreateAssetBundle : Editor 
{
    [MenuItem("Assets/Build AssetBundle Scene")]
    static void BuildScene() {
        string[] levels = {"Assets/Scenes/CubeScene.unity"};
        BuildPipeline.BuildPlayer(levels, Application.dataPath+"/CubeScene.unity3d", 
            BuildTarget.WebGL, BuildOptions.BuildAdditionalStreamedScenes);
        AssetDatabase.Refresh();
    }
}

在 Unity 編輯器 Assets 根目錄下創建一個 Editor 文件夾,將這個腳本放進去。右鍵空白處,Build AssetBundle Scene,即可創建一個名爲 CubeScene.unity3d 的AssetBundle。

服務器設置

我申請的是阿里雲的ECS雲服務器,Web服務器使用的是Tomcat。我們的目的是:訪問服務器上的 .unity3d 文件時,能夠下載到本地。所以,修改tomcat/conf下的 web.xml 文件,添加MIME 處理方式,如下所示:
服務器設置
在 tomcat/webapps 下,創建一個AssetBundle文件夾,將上節創建的 CubeScene.unity3d 文件放到這個文件夾,如下所示:
放到文件夾下

使用腳本讀取服務器上的AssetBundle

創建一個 LoadWebAsset.cs 腳本,並將其掛載到主場景Main的相機上(或任意物體),注意將url中的DomianName替換成自己的網址。代碼如下:

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Networking;

public class LoadWebAsset : MonoBehaviour
{
    void Start ()   
    {
        StartCoroutine(LoadSceneFromWeb());
    }  
    
    IEnumerator LoadSceneFromWeb()
    {
        string url = "http://DomainName/AssetBundle/CubeScene.unity3d";
        Debug.Log(url);

        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        yield return request.SendWebRequest();

        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
        string[] scenePath = ab.GetAllScenePaths();
        SceneManager.LoadScene(scenePath[0]);
    }
}

發佈並測試

發佈場景時,只選擇主場景 Main。
發佈
發佈完成後,將其放到服務器上,然後再訪問其網址即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章