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%用戶已解決
本次就到這里了,謝謝大家觀看