前言

在unity中使用assertbundle是一个十分常见的场景,在各种各样的方面都会遇到,但是unity editor 本身不提供任何的按钮为你打包assertbundle,但是unity提供api来帮助你,所以大家一般都是编写脚本。

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System.IO;
using UnityEditor;

/// <summary>
/// AssetBundleUnityEditor
/// </summary>
public class QAssetBundleEditor
{
static string OUT_PATH_WIN64 = "AssetBundles/Win64/AssetBundles";
static string OUT_PATH_IOS = "AssetBundles/IOS/AssetBundles";
static string OUT_PATH_Android = "AssetBundles/Android/AssetBundles";

/// <summary>
/// BuildWin64
/// </summary>
[MenuItem("AssetBundle/BuildWin64")]
public static void BuildAssetBundle_Win64()
{
BuildAssetBundles(OUT_PATH_WIN64, BuildTarget.StandaloneWindows64);
}

/// <summary>
/// BuildWin64
/// </summary>
[MenuItem("AssetBundle/BuildIOS")]
public static void BuildAssetBundle_IOS()
{
BuildAssetBundles(OUT_PATH_IOS, BuildTarget.iOS);
}

/// <summary>
/// BuildWin64
/// </summary>
[MenuItem("AssetBundle/BuildAndroid")]
public static void BuildAssetBundle_Android()
{
BuildAssetBundles(OUT_PATH_Android, BuildTarget.Android);
}

public static void BuildAssetBundles(string outPath, BuildTarget buildTarget)
{
if (Directory.Exists(outPath))
{
Directory.Delete(outPath, true);
}
Directory.CreateDirectory(outPath);
BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.UncompressedAssetBundle, buildTarget);

AssetDatabase.Refresh();
}
}

注意的事项

image-20240513121926106

不要忘记给你需要打包的AssetBundle命名如果不命名unity是不会打包的,abb是后缀名是可以不用设置的。

image-20240513122238997

命名时选择new

image-20240513122327262

输入后回车就设置名字完成。

image-20240513122046564

再选择一个就好了。