Unity生成AB包和加載AB包


unity生成AB包

生產AB包,編輯器腳本放在Editor文件夾下(切記)

如果你是PC包 BuildTarget.WebGL  后面要改成PC (BuildTarget.StandaloneWindows64)

using UnityEngine;
using UnityEditor;
using System.IO;

public class BuildAssetBundle : MonoBehaviour
{
    [MenuItem("Tools/打AB包")]
    public static void BuildAB()
    {
        string dir = Application.streamingAssetsPath;    //定義AB包路徑:工程目錄下的StreamingAssets
        if (Directory.Exists(dir) == false)//如果不存在文件夾,那么新建一個
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir,
            BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.WebGL);
        AssetDatabase.Refresh();
        Debug.LogError("打包完成");
    }
}

 

1.先把你需要的對象變成預制體,選中預制體,給預制體添加AssetBundle(如下圖)

 

 

 

 

 

 

2.設置完成點擊Tools/打AB包 等待即可

完成之后文件夾會出現 如下圖文件

 

 

 

3.然后把第一個文件復制到自己的服務器即可

 

加載AB包

1.兩種方式腳本如下

using System.Collections;
using UnityEngine;
using UnityEngine.Networking;

public class Load_AB : MonoBehaviour
{
    private void Start()
    {
        StartCoroutine(LoadWWW());
        StartCoroutine(FromWebRequest());
    }
    private IEnumerator FromWebRequest()
    {
        string path = @"http://192.168.1.80:8088/unity/model.ab";
        UnityWebRequest webRequest = UnityWebRequestAssetBundle.GetAssetBundle(path);
        yield return webRequest.SendWebRequest();
        AssetBundle assetBundle = DownloadHandlerAssetBundle.GetContent(webRequest);
        //object obj = assetBundle.LoadAsset("Image");
        //Instantiate((GameObject)obj, FindObjectOfType<Canvas>().transform);
        object[] objects = assetBundle.LoadAllAssets();
        foreach (var item in objects)
        {
            Instantiate((GameObject)item, FindObjectOfType<Canvas>().transform);
        }
        yield return null;
    }

    private WWW Loadab;

    private IEnumerator LoadWWW()
    {
        Loadab = new WWW("http://192.168.1.80:8088/unity/model.ab");  // 路徑可以根據自己需求來修改
        yield return Loadab;
        if (Loadab.error != null)
        {
            Debug.Log(Loadab.error);
        }
        else
        {
            object[] objects = Loadab.assetBundle.LoadAllAssets();
            foreach (var item in objects)
            {
                Instantiate((GameObject)item, FindObjectOfType<Canvas>().transform);
            }
        }
    }
}

 

如果沒有服務器可以配置一個本地服務器 (iis管理器)

本地搜索iis打開如下圖

 

右鍵網站

 

 

 

 

 點擊添加網站

 

 

 

網站名稱:隨便起

物理路徑:找一個自己的文件夾方便找

IP地址:一般都是本機Ip

端口:設置其他即可(80沒有占用的情況下可以不用改)

雙擊MIME類型(右鍵添加新類型)

 

 

 

 因為是AB包所以添加后綴  .ab   類型是:application/octet-stream

 

 

 

 

這個添加完后找到你剛剛設置的文件夾地址里面有一個web.config文件,編輯此文件

編輯好的圖如下圖

 

 

 

需要添加的類型代碼如下  上面的.ab類型也可以在這里加

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
      <remove fileExtension=".mem" />
      <remove fileExtension=".data" />
      <remove fileExtension=".unity3d" />
      <remove fileExtension=".jsbr" />
      <remove fileExtension=".membr" />
      <remove fileExtension=".databr" />
      <remove fileExtension=".unity3dbr" />
      <remove fileExtension=".jsgz" />
      <remove fileExtension=".memgz" />
      <remove fileExtension=".datagz" />
      <remove fileExtension=".unity3dgz" />
      <remove fileExtension=".json" />
      <remove fileExtension=".unityweb" />
 
      <mimeMap fileExtension=".mem" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".data" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".unity3d" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".jsbr" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".membr" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".databr" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".unity3dbr" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".jsgz" mimeType="application/x-javascript; charset=UTF-8" />
      <mimeMap fileExtension=".memgz" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".datagz" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".unity3dgz" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".json" mimeType="application/json; charset=UTF-8" />
      <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            <mimeMap fileExtension=".ab" mimeType="application/octet-stream" />
        </staticContent>
        <httpProtocol>
            <customHeaders>
                <add name="Access-Control-Allow-Origin" value="*" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

 

2.如果你發布的是WebGl加載AB包模型出現丟失材質的情況

需要在編輯器里加入你模型需要的材質shader如下圖

 

 

 

 默認只有6個其他的都是添加的

 重新打包AB包,80%用戶已解決

 

本次就到這里了,謝謝大家觀看

 


免責聲明!

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



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