首先在Assets下面创建Editor文件夹,并创建Build脚本
创建菜单栏按钮
[MenuItem("Tools/打包工具")]
public static void ShowWindow()//此方法表示“打包工具”按钮点击下的执行事件
{
GetWindow(typeof(BuildEditor));//显示窗口,上面显示BuildEditor脚本的内容
}
显示UI
private void OnGUI()
{
//下拉单选列表选平台
this.platformType = (PlatformType)EditorGUILayout.EnumPopup("选择平台工具:",platformType);
//勾选框
this.isBuildExe = EditorGUILayout.Toggle("是否打包EXE: ", this.isBuildExe);
//下拉多选框选打包选项
this.buildAssetBundleOptions = (BuildAssetBundleOptions)EditorGUILayout.EnumFlagsField("BuildAssetBundleOptions(可多选): ", this.buildAssetBundleOptions);
}
构建播放器
//播放器(需要播放的场景,构建成功后存放的路径,选择目标构建平台,构建播放器选项)
BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
打包
//打包(输出路径,AssetBundle构建选项,选择目标构建平台)LZMA,LZ4,无压缩
BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
构建播放器目标平台的参数(目标构建平台):枚举类型 BuildTarget
BuildTarget.StandaloneOSX //构建一个独立的macOS(Intel 64位)。
BuildTarget.StandaloneWindows //构建Windows独立版。
BuildTarget.iOS //构建iOS播放器。
BuildTarget.Android //构建Android .apk独立应用。
BuildTarget.StandaloneLinux //构建Linux独立版。
BuildTarget.StandaloneWindows64 //构建Windows 64位独立版。
BuildTarget.WebGL //WebGL
BuildTarget.WSAPlayer //构建Windows应用商店应用播放器。
BuildTarget.StandaloneLinux64 //构建一个Linux 64位独立版。
BuildTarget.StandaloneLinuxUniversal //构建Linux通用独立版。
BuildTarget.PSP2 //构建PS Vita 平台。
BuildTarget.PS4 //构建PS4 平台。
BuildTarget.XboxOne //构建一个Xbox One 平台。
BuildTarget.N3DS //构建任天堂3DS平台。
BuildTarget.tvOS //构建Apple的tvOS平台。
BuildTarget.Switch //构建一个Nintendo Switch播放器。
构建播放器选项:枚举类型:BuildOptions
//执行指定的构建,无需任何特殊设置或额外任务
BuildOptions.None
//构建播放器的开发版本。
//开发版本包括调试符号并启用 Profiler。
BuildOptions.Development
//运行构建的播放器。
//在构建成功后会运行构建器
BuildOptions.AutoRunPlayer
//显示内置播放器。
BuildOptions.ShowBuiltPlayer
//构建压缩资产包,其中包含可通过UnityWebRequest类加载的流式场景。
BuildOptions.BuildAdditionalStreamedScenes
//在构建Xcode(iOS)或Eclipse(Android)项目时使用。
//在iOS上,此设置将附加现有的Xcode项目。将保留现有的Xcode项目设置更改。
//使用IL2CPP脚本后端,此设置还将允许生成的C ++代码的增量构建在Xcode中工作。
//在Android上,此设置将创建一个新的Eclipse项目。现有的Eclipse项目设置更改将被丢弃。
BuildOptions.AcceptExternalModificationsToPlayer
//通过编辑器中与探查器的连接启动播放器。
BuildOptions.ConnectWithProfiler
//允许脚本调试程序远程连接到播放器。
BuildOptions.AllowDebugging
//生成iOS Xcode项目时的Symlink运行时库。(更快的迭代时间)。
BuildOptions.SymlinkLibraries
//创建资产包时不要压缩数据。
//这使得构建和加载更快,但由于它要大得多,下载时间会更长。
BuildOptions.UncompressedAssetBundle
//将播放器设置为连接到编辑器。
//将Player设置为连接到Editor,它需要设置BuildOptions.Development。请注意,您只应在开发中使用它。
BuildOptions.ConnectToHost
//构建无头Linux独立版。
//不能用于进行开发构建。
BuildOptions.EnableHeadlessMode
//仅在项目中构建脚本。
//在使用BuildScriptsOnly之前,您需要构建整个Project。然后,您可以运行仅具有脚本更改的构建。
BuildOptions.BuildScriptsOnly
//在构建中包含断言。默认情况下,断言仅包含在开发构建中。
BuildOptions.ForceEnableAssertions
//在构建播放器时使用基于块的LZ4压缩。
/*当Player部署到设备时,此值允许以压缩形式存储数据。当播放器读取数据时,实时执行解压缩。与使用未压缩数据相比,场景或资产加载可能更快或更慢,具体取决于磁盘读取速度。
压缩数据文件包括:
1。播放器设置 - globalgamemanagers和globalgamemanagers.assets文件。
2.场景和资产 - 级别*和共享集* .asset文件。
3.资源 - resources.assets文件。
4. GI数据。
5.内置资源 - unity_builtin_extra文件。*/
BuildOptions.CompressWithLz4
//在构建播放器时使用基于块的LZ4高压缩。
BuildOptions.CompressWithLz4HC
//如果在其中报告任何错误,则不允许构建成功。
/*如果没有此标志,非致命错误(例如无法为特定平台编译着色器)将不会导致构建失败,但可能会导致运行时出现错误行为。*/
BuildOptions.StrictMode
//构建将包括用于测试的程序集。
BuildOptions.IncludeTestAssemblies
//将强制buildGUID全部为零。
BuildOptions.NoUniqueIdentifier
//同时在选择平台时也可以根据如下函数自动获取
Platform.GetPlatformFolder(EditorUserBuildSettings.activeBuildTarget)
AsseteBundle构建选项,枚举类型:BuildAssetBundleOptions
测试如下
测试
文件
//无需任何特殊选项即可构建assetBundle。
BuildAssetBundleOptions.None
//创建资产包时不要压缩数据。
//这使得构建和加载更快,但由于它要大得多,下载时间会更长。
BuildAssetBundleOptions.UncompressedAssetBundle
//不要在AssetBundle中包含类型信息。
//指定此标志将使AssetBundle易受脚本或Unity版本更改的影响,但会使文件更小,加载速度更快。
//构建BuildTarget.WebPlayer时指定此标志,Unity将拒绝构建AssetBundle。
BuildAssetBundleOptions.DisableWriteTypeTree
//使用存储在资产包中的对象的id的哈希构建资产包。
BuildAssetBundleOptions.DeterministicAssetBundle
//强制重建assetBundles。
//这允许您重建assetBundle,即使所包含的资产都没有更改。
BuildAssetBundleOptions.ForceRebuildAssetBundle
//执行增量构建检查时忽略类型树更改。
//这允许您在执行增量构建检查时忽略类型树更改。
//设置此标志后,如果包含的资产未更改但类型树已更改,则不会重建目标assetBundle。
BuildAssetBundleOptions.IgnoreTypeTreeChanges
//将哈希附加到assetBundle名称。
//这允许您将哈希附加到assetBundle名称。
BuildAssetBundleOptions.AppendHashToAssetBundleName
//创建AssetBundle时使用基于块的LZ4压缩。
//这允许在从AssetBundle读取数据时进行实时解压缩。
//使用此选项创建的AssetBundles在下载后以压缩形式存储(在磁盘缓存或内存中)。
BuildAssetBundleOptions.ChunkBasedCompression
//如果在其中报告任何错误,则不允许构建成功。
//如果没有此标志,非致命错误(例如无法为特定平台编译着色器)将不会导致构建失败,
//但可能会导致运行时出现错误行为。
BuildAssetBundleOptions.StrictMode
//这允许您为AssetBundles执行干运行构建,但不实际构建它们。
//启用此选项后,BuildPipeline.BuildAssetBundles仍会返回包含有效AssetBundle依赖项和哈希值的AssetBundleManifest对象。
BuildAssetBundleOptions.DryRunBuild
//按文件名禁用Asset Bundle LoadAsset。
/默认情况下,Asset Bundles有三种方法可以查找同一资产:完整资产路径,资产文件名和带扩展名的资产文件名。
完整路径序列化为资产包,而从文件加载资产包时会生成带扩展名的文件名和文件名。
示例:“Assets / Prefabs / Player.prefab”,“Player”和“Player.prefab”
此选项将在资产包上设置一个标志,以防止创建资产文件名查找。
此选项可为资产包保存运行时内存和加载性能。*/
BuildAssetBundleOptions.DisableLoadAssetByFileName
//通过带扩展名的文件名禁用Asset Bundle LoadAsset。
/默认情况下,Asset Bundles有三种方法可以查找同一资产:完整资产路径,资产文件名和带扩展名的资产文件名。完整路径序列化为资产包,而从文件加载资产包时会生成带扩展名的文件名和文件名。
示例:“Assets / Prefabs / Player.prefab”,“Player”和“Player.prefab”
此选项将在资产包上设置一个标志,以防止使用扩展名查找创建资产文件名。此选项可为资产包保存运行时内存和加载性能。/
BuildAssetBundleOptions.DisableLoadAssetByFileNameWithExtension
从以上数据中可以看出:使用BuildAssetBundleOptions.DisableWriteTypeTree压缩方式会使得文件最小,
而使用 BuildAssetBundleOptions.UncompressedAssetBundle压缩方式则会使文件最大,但是同时 BuildAssetBundleOptions.UncompressedAssetBundle因为没有对文件进行压缩,所以加载速度也是最快的
》BuildAssetBundleOptions.None:需要构建的AssetBundle没有任何特殊选项,压缩格式便是LZMA;
》BuildAssetBundleOptions.UncompressedAssetBundle,构建的AssetBundle不进行任何压缩,这种类型构建/解压都很快,但是AssetBundle会比较大。
》BuildAssetBundleOptions.ChunkBasedCompression,LZ4压缩,算法基于Chunk,解压缩时间相对就要断,AssetBundle比不压缩小但是比LZMA压缩方式要大。默认情况下,AssetBundle的标准压缩格式便是LZMA(LZMA是一种序列化流文件)