轉(zhuǎn)載請(qǐng)標(biāo)明原文地址:https://segmentfault.com/a/11...
Unity2018已經(jīng)把打包過(guò)程簡(jiǎn)化很多了 我們只需要關(guān)心1個(gè)API: 1.BuildPipline.BuildAssetBundles() 打包AssetBundle
2.BuildPipline.BuildPlayer() 打包場(chǎng)景 (場(chǎng)景可以打包進(jìn)AssetBundle里動(dòng)態(tài)加載 所以不推薦用這個(gè)API了)
1.打包AssetBundle 先在資源的Inspector面板最下方 填寫資源所屬的AssetBundle名稱和后綴(后綴可以不填) 再利用BuildPipeline.BuildAssetBundles()進(jìn)行打包
2.打包Scene (1)可以利用BuildPipline.BuildAssetBundles()進(jìn)行打包。 注意:場(chǎng)景包內(nèi)只能給.unity場(chǎng)景文件填寫資源包名,,不能給其他資源命名,,否則打包會(huì)失敗 一個(gè)場(chǎng)景ab包內(nèi)可以包含多個(gè)場(chǎng)景文件,場(chǎng)景需要的資源會(huì)自動(dòng)關(guān)聯(lián) 有些資源是Editor下專用的,。不會(huì)被打包進(jìn)ab里 比如LightingData.asset 使用方式是www加載場(chǎng)景ab包后 先調(diào)用www.assetBundle 再調(diào)用SceneManager.LoadScene("name")
(2)利用BuildPipeline.BuildPlayer()進(jìn)行打包
為方便使用 先把要打包的場(chǎng)景放入指定的文件夾 通過(guò)腳本批量打包 推薦使用方法(1)打包
3.腳本批量打包
4.打包完畢
5.加載資源測(cè)試
6.打包和測(cè)試腳本
AssetBundleBuilder.cs
using UnityEngine;
using UnityEditor;
using System.IO;
/// <summary>
/// 打包工具
/// <para>打包AssetBundle(Unity 2018.2.20)</para>
/// <para>ZhangYu 2019-02-26</para>
/// <para>Blog:https://segmentfault.com/a/1190000018320573</para>
/// </summary>
public class AssetBundleBuilder {
[MenuItem("批處理/打包AssetBundle")]
private static void BuildAssetBundle() {
BuildAssetBundles(CurrentBuildTarget);
}
// 打包AssetBundles
private static void BuildAssetBundles(BuildTarget platform) {
// 提示信息
string msg = "當(dāng)前平臺(tái):{0}\n輸出路徑:{1}";
string output = Application.streamingAssetsPath + "/Abs";
msg = string.Format(msg, platform.ToString(), output);
if (EditorUtility.DisplayDialog("打包信息", msg, "確定", "取消")) {
if (!Directory.Exists(output)) Directory.CreateDirectory(output);
EditorUtility.DisplayProgressBar("信息", "打包資源包", 0f);
BuildPipeline.BuildAssetBundles(output, BuildAssetBundleOptions.DeterministicAssetBundle, platform);
AssetDatabase.Refresh();
EditorUtility.DisplayDialog("提示", "打包AssetBundle完畢", "確定");
}
}
// 當(dāng)前平臺(tái)
private static BuildTarget CurrentBuildTarget {
get {
#if UNITY_STANDALONE
return BuildTarget.StandaloneWindows;
#elif UNITY_ANDROID
return BuildTarget.Android;
#elif UNITY_IPHONE
return BuildTarget.iOS;
#endif
}
}
}
LoadTest.cs
using UnityEngine;
using UnityEngine.SceneManagement;
/// <summary> 加載測(cè)試 </summary>
public class LoadTest : MonoBehaviour {
private void Start () {
LoadPrefab();
LoadScene();
}
// 加載預(yù)制資源包
private void LoadPrefab() {
// 資源包路徑
string path = Application.streamingAssetsPath + "/Abs/test_prefab.ab";
// WWW下載
Http http = gameObject.AddComponent<Http>();
http.get(path, OnLoadPrefabAbComplete);
}
// 加載場(chǎng)景資源包
private void LoadScene() {
// 資源包路徑
string path = Application.streamingAssetsPath + "/Abs/test_scene.ab";
// WWW下載
Http http = gameObject.AddComponent<Http>();
http.get(path, OnLoadSceneAbComplete);
}
// 加載預(yù)制資源包完畢
private void OnLoadPrefabAbComplete(WWW www) {
// 實(shí)例化預(yù)制
AssetBundle ab = www.assetBundle;
Object prefab = ab.LoadAsset("Test");
GameObject instance = (GameObject)Instantiate(prefab);
DontDestroyOnLoad(instance);
}
// 加載場(chǎng)景資源包完畢
private void OnLoadSceneAbComplete(WWW www) {
// 必須寫www.assetBundle這句 這樣場(chǎng)景才能被讀取到
AssetBundle ab = www.assetBundle;
SceneManager.LoadScene("Test", LoadSceneMode.Single);
}
}
7.打包插件 官方插件Asset Bundle Browser里不但提供了資源包的瀏覽功能 也提供了資源包的打包功能 如果想詳細(xì),、方便的了解打包參數(shù) 推薦使用該插件
插件地址:https://assetstore./...
|