unity3d学习之AssetBundle打包

首先在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是一种序列化流文件)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity3D是一款功能强大的游戏开发引擎,支持跨平台开发。在使用Unity3D进行开发时,我们常常需要加载资源包(Asset Bundle,简称AB包)来实现游戏中的动态资源加载。本地加载AB包一般分为以下几个步骤: 首先,我们需要在Unity编辑器中将需要打包的资源进行设置,选择对应的资源进行打包,生成相应的AB包文件。可以选择将资源打包成一个或多个AB包,根据自己的需求进行设置。 然后,将生成的AB包文件复制到游戏的本地目录下。可以将AB包文件放在Assets目录下,也可以放在其他指定的目录下,方便我们后续进行加载。 接下来,我们需要通过代码来加载AB包。Unity3D提供了一些API来实现这个功能。我们可以使用AssetBundle.LoadFromFile或AssetBundle.LoadFromFileAsync来加载AB包文件,将AB包文件加载到内存中。 加载成功后,我们就可以通过AB包中的资源名或者路径来获取对应的资源对象,然后进行相应的使用。可以使用AssetBundle.LoadAsset来加载一个资源对象,或者使用AssetBundle.LoadAssetAsync进行异步加载。 最后,在游戏中不需要使用AB包时,我们需要释放加载的AB包资源,以释放内存。可以使用AssetBundle.Unload或AssetBundle.UnloadAsync来卸载AB包,释放AB包占用的资源和内存。 通过以上步骤,我们可以实现在Unity3D中本地加载AB包的功能,实现动态资源加载,提高游戏的灵活性和扩展性,为玩家带来更好的游戏体验。 ### 回答2: Unity3D是一款非常强大的游戏开发引擎,支持本地加载Asset Bundle(AB包)。AB包是一种包含资源文件的打包格式,可以包含场景、模型、材质、贴图、音频等各种游戏资源。 在Unity3D中,本地加载AB包有以下几个步骤: 1. 创建AssetBundle对象:使用AssetBundle类的LoadFromFile方法,指定AB包的路径,即可创建一个AssetBundle对象。 2. 加载资源:通过AssetBundle对象的LoadAsset方法,传入资源的类型和名称,即可加载指定的资源。 3. 实例化对象:通过Object类的Instantiate方法,传入加载的资源对象,即可创建其实例,可以将资源实例化为游戏中的对象,比如场景、角色等。 4. 使用资源:加载完成后,可以使用资源对象的各种属性和方法,比如修改材质、播放音频等。 5. 释放资源:加载的资源在不使用时应该进行释放,通过AssetBundle对象的Unload方法,可以释放AB包以及其加载的资源,以释放内存。 需要注意的是,本地加载AB包需要事先将资源打包成AB包,并将AB包放置在合适的路径下。在加载AB包时,需要指定准确的路径,并确保路径中的AB包存在。 本地加载AB包是Unity3D非常常见且重要的功能,可以方便地管理和加载游戏资源,提高游戏开发的效率和性能。通过熟练掌握AB包的打包和加载原理,可以更好地实现游戏的开发需求。 ### 回答3: 在Unity3D中,AB包是Asset Bundle的缩写,是一种用于打包和加载资源的机制。本地加载AB包是指从本地磁盘读取AB包文件并加载其中的资源。 首先,我们需要准备好AB包文件,可以使用Unity3D提供的BuildPipeline.BuildAssetBundles 方法进行打包打包完成后,会生成一个或多个AB包文件,通常是以.unity3d或.ab后缀结尾的文件。 然后,我们可以使用AssetBundle.LoadFromFile 方法从指定的本地路径加载AB包文件。这个方法接受一个字符串参数,表示AB包文件的路径。加载完成后,会返回一个AssetBundle对象。 接下来,我们可以通过AssetBundle对象获取其中的资源。可以使用Load 方法加载一个或多个资源,也可以使用LoadAll 方法加载所有资源。这些方法通常接受一个字符串参数,表示要加载的资源的名称。加载的资源根据其类型而定,可以是GameObject、Texture、AudioClip等等。 加载完资源后,我们可以进行相应的处理,比如显示3D模型、设置游戏场景、播放音频等等。 使用完AssetBundle后,为了释放内存和资源,可以使用AssetBundle.Unload 方法卸载AB包文件。这个方法接受一个布尔值参数,表示是否同时卸载AB包中所有的资源。通常建议传入true,以确保完全卸载AB包。 总结起来,Unity3D中本地加载AB包的过程大致如下:准备AB包文件 -> 使用AssetBundle.LoadFromFile加载AB包文件 -> 使用AssetBundle.Load加载资源 -> 处理加载的资源 -> 使用AssetBundle.Unload卸载AB包。 这样,我们就可以通过Unity3D本地加载AB包,实现更高效的资源管理和加载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值