YooAsset/Docs/AssetBuilder.md

3.8 KiB
Raw Blame History

资源构建

image

界面介绍

Build Output

构建输出的目录会根据Unity编辑器当前切换的平台自动划分构建结果。

Build Version

构建版本号,也是资源版本号,版本号必须大于零。

Compression

资源包的压缩方式。

Append Extension

构建的资源包文件名是否包含后缀格式。

Force Rebuild

是否为强制重新构建,如果不勾选则为增量构建模式。注意:强制重建会删除当前平台下所有的补丁包文件。

Buildin Tags

标记为安装包里的资源标签列表。构建成功后会将相关标记的资源包拷贝到StreamingAssets文件夹下。

Build

点击Build按钮会开始构建流程构建流程分为多个节点顺序执行如果某个节点发生错误会导致构建失败。错误信息可以在控制台查看。

资源包加密

编写继承IAssetEncrypter接口的加密类。注意加密类文件需要放置在Editor文件夹里。

public class AssetEncrypter : IAssetEncrypter
{
	/// <summary>
	/// 检测资源包是否需要加密
	/// </summary>
	bool IAssetEncrypter.Check(string filePath)
	{
		// 对配置表相关的资源包进行加密
		return filePath.Contains("Assets/Config/");
	}

	/// <summary>
	/// 对数据进行加密,并返回加密后的数据
	/// </summary>
	byte[] IAssetEncrypter.Encrypt(byte[] fileData)
	{
		int offset = 32;
		var temper = new byte[fileData.Length + offset];
		Buffer.BlockCopy(fileData, 0, temper, offset, fileData.Length);
		return temper;
	}
}

补丁包

构建成功后会在输出目录下找到补丁包文件夹,该文件夹名称为本次构建时指定的资源版本号。

补丁包文件夹里包含补丁清单和资源包文件以及说明文件,资源包文件都是以文件的哈希值命名。

image

补丁清单

补丁清单是一个Json格式的文本文件里面包含了所有资源包的信息例如名称版本大小CRC等。

image

Jenkins支持

如果需要自动化构建,可以参考如下代码范例:

private static void BuildInternal(BuildTarget buildTarget)
{
	Debug.Log($"开始构建 : {buildTarget}");

	// 打印命令行参数
	int buildVersion = GetBuildVersion();
	bool isForceBuild = IsForceBuild();
	Debug.Log($"资源版本 : {buildVersion}");
	Debug.Log($"强制重建 : {isForceBuild}");

	// 构建参数
	string defaultOutputRoot = AssetBundleBuilderHelper.GetDefaultOutputRoot();
	AssetBundleBuilder.BuildParameters buildParameters = new AssetBundleBuilder.BuildParameters();
	buildParameters.IsVerifyBuildingResult = true;
	buildParameters.OutputRoot = defaultOutputRoot;
	buildParameters.BuildTarget = buildTarget;
	buildParameters.BuildVersion = buildVersion;
	buildParameters.CompressOption = ECompressOption.LZ4;
    buildParameters.AppendFileExtension = false;
	buildParameters.IsForceRebuild = isForceBuild;
	buildParameters.BuildinTags = "buildin";

	// 执行构建
	AssetBundleBuilder builder = new AssetBundleBuilder();
	builder.Run(buildParameters);

	// 构建完成
	Debug.Log("构建完成");
}

// 从构建命令里获取参数
private static int GetBuildVersion()
{
	foreach (string arg in System.Environment.GetCommandLineArgs())
	{
		if (arg.StartsWith("buildVersion"))
			return int.Parse(arg.Split("="[0])[1]);
	}
	return -1;
}
private static bool IsForceBuild()
{
	foreach (string arg in System.Environment.GetCommandLineArgs())
	{
		if (arg.StartsWith("forceBuild"))
			return arg.Split("="[0])[1] == "true" ? true : false;
	}
	return false;
}