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%用户已解决

 

本次就到这里了,谢谢大家观看

 

posted @ 2022-04-07 17:51  剑起苍穹  阅读(3231)  评论(0编辑  收藏  举报
/*鼠标点击特效*/