转载请标明原文地址:https://segmentfault.com/a/11...
Unity2018已经把打包过程简化很多了
我们只需要关心1个API:
1.BuildPipline.BuildAssetBundles() 打包AssetBundle2.BuildPipline.BuildPlayer() 打包场景 (场景可以打包进AssetBundle里动态加载 所以不推荐用这个API了)
1.打包AssetBundle
先在资源的Inspector面板最下方 填写资源所属的AssetBundle名称和后缀(后缀可以不填)
再利用BuildPipeline.BuildAssetBundles()进行打包
2.打包Scene
(1)可以利用BuildPipline.BuildAssetBundles()进行打包。
注意:场景包内只能给.unity场景文件填写资源包名,不能给其他资源命名,否则打包会失败
一个场景ab包内可以包含多个场景文件,场景需要的资源会自动关联
有些资源是Editor下专用的。不会被打包进ab里 比如LightingData.asset
使用方式是www加载场景ab包后 先调用www.assetBundle 再调用SceneManager.LoadScene("name")
(2)利用BuildPipeline.BuildPlayer()进行打包为方便使用 先把要打包的场景放入指定的文件夹 通过脚本批量打包
推荐使用方法(1)打包
3.脚本批量打包
4.打包完毕
5.加载资源测试
6.打包和测试脚本
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 = "当前平台:{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完毕", "确定");
}
}
// 当前平台
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> 加载测试 </summary>
public class LoadTest : MonoBehaviour {
private void Start () {
LoadPrefab();
LoadScene();
}
// 加载预制资源包
private void LoadPrefab() {
// 资源包路径
string path = Application.streamingAssetsPath + "/Abs/test_prefab.ab";
// WWW下载
Http http = gameObject.AddComponent<Http>();
http.get(path, OnLoadPrefabAbComplete);
}
// 加载场景资源包
private void LoadScene() {
// 资源包路径
string path = Application.streamingAssetsPath + "/Abs/test_scene.ab";
// WWW下载
Http http = gameObject.AddComponent<Http>();
http.get(path, OnLoadSceneAbComplete);
}
// 加载预制资源包完毕
private void OnLoadPrefabAbComplete(WWW www) {
// 实例化预制
AssetBundle ab = www.assetBundle;
Object prefab = ab.LoadAsset("Test");
GameObject instance = (GameObject)Instantiate(prefab);
DontDestroyOnLoad(instance);
}
// 加载场景资源包完毕
private void OnLoadSceneAbComplete(WWW www) {
// 必须写www.assetBundle这句 这样场景才能被读取到
AssetBundle ab = www.assetBundle;
SceneManager.LoadScene("Test", LoadSceneMode.Single);
}
}
7.打包插件
官方插件Asset Bundle Browser里不但提供了资源包的浏览功能 也提供了资源包的打包功能
如果想详细、方便的了解打包参数 推荐使用该插件
插件地址:https://assetstore.unity.com/...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。