代码参考如下:
using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
public class BuildAssetBundle : MonoBehaviour
{
//---------------------------------------------------------------------------------------------------------------------------------------------------------
static void PackageScene(BuildTarget buildTarget)
{
string packagePath = EditorUtility.OpenFolderPanel("设置激活场景的打包路径(" + buildTarget + "版)", Application.streamingAssetsPath, "");
if (packagePath.Length <= 0 || !Directory.Exists(packagePath))
{
Debug.Log("Directory Error!");
return;
}
packagePath += ("/" + EditorSceneManager.GetActiveScene().name);
BuildPipeline.BuildPlayer(new string[] { }, packagePath, buildTarget, BuildOptions.BuildAdditionalStreamedScenes);
Debug.Log(packagePath);
AssetDatabase.Refresh();
}
[MenuItem("资源打包 / 当前场景(WebGL版)")]
static void PackageSceneWebGL()
{
PackageScene(BuildTarget.WebGL);
}
[MenuItem("资源打包 / 当前场景(Window版)")]
static void PackageSceneWindow()
{
PackageScene(BuildTarget.StandaloneWindows);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
static void PackageSelected(BuildTarget buildTarget)
{
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
if (path.Length == 0)
{
Debug.LogWarning("没有选择可被打包的对象!");
return;
}
Debug.Log(path);
string packagePath = EditorUtility.OpenFolderPanel("设置选择资源的打包路径(" + buildTarget + "版)", Application.streamingAssetsPath, "");
if (packagePath.Length <= 0 || !Directory.Exists(packagePath))
{
Debug.Log("Directory Error!");
return;
}
packagePath += "/" + Selection.activeObject.name;
Debug.Log(packagePath);
Object obj = AssetDatabase.LoadMainAssetAtPath(path);
BuildPipeline.BuildAssetBundle(obj, null, packagePath, BuildAssetBundleOptions.None, buildTarget);
AssetDatabase.Refresh();
}
[MenuItem("资源打包 / 选择资源(WebGL版)")]
static void PackageSelectedWebGL()
{
PackageSelected(BuildTarget.WebGL);
}
[MenuItem("资源打包 / 选择资源(Window版)")]
static void PackageSelectedWindow()
{
PackageSelected(BuildTarget.StandaloneWindows);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
static void Package(BuildTarget buildTarget)
{
string packagePath = EditorUtility.OpenFolderPanel("设置预设资源的打包路径(" + buildTarget + "版)", Application.streamingAssetsPath, "");
if (packagePath.Length <= 0 || !Directory.Exists(packagePath))
{
Debug.Log("Directory Error!");
return;
}
BuildPipeline.BuildAssetBundles(packagePath, BuildAssetBundleOptions.None, buildTarget);
AssetDatabase.Refresh();
}
[MenuItem("资源打包 / 预设资源(WebGL版)")]
static void PackageWebGL()
{
Package(BuildTarget.WebGL);
}
[MenuItem("资源打包 / 预设资源(Window版)")]
static void PackageWindow()
{
Package(BuildTarget.StandaloneWindows);
}
}
说明两点:
一、BuildPipeline.BuildAssetBundle这个方法显示已经过时,不过,管用就好。
二、如果希望当前场景打包内容包含寻路数据,需要在Player Setting中的H5发布中的Strip Engine Code的勾选去掉,如下图: