unity打包帮助类(BuildHelper)(c#)

public static class BuildHelper
{
private const string relativeDirPrefix = “…/Release”;
public static string BuildFolder = “…/Release/{0}/StreamingAssets/”;

	public static void Build(PlatformType type, BuildAssetBundleOptions buildAssetBundleOptions, BuildOptions buildOptions, bool isBuildExe, bool isContainAB)
	{
		BuildTarget buildTarget = BuildTarget.StandaloneWindows;
		string exeName = "ET";
		switch (type)
		{
			case PlatformType.PC:
				buildTarget = BuildTarget.StandaloneWindows64;
				exeName += ".exe";
				break;
			case PlatformType.Android:
				buildTarget = BuildTarget.Android;
				exeName += ".apk";
				break;
			case PlatformType.IOS:
				buildTarget = BuildTarget.iOS;
				break;
			case PlatformType.MacOS:
				buildTarget = BuildTarget.StandaloneOSX;
				break;
		}

		string fold = string.Format(BuildFolder, type);
		
		Log.Info(fold);
		if (!Directory.Exists(fold))
		{
			Directory.CreateDirectory(fold);
		}
		
		Log.Info("开始资源打包");
		BuildPipeline.BuildAssetBundles(fold, buildAssetBundleOptions, buildTarget);
		
		GenerateVersionInfo(fold);
		Log.Info("完成资源打包");

		if (isContainAB)
		{
			FileHelper.CleanDirectory("Assets/StreamingAssets/");
			FileHelper.CopyDirectory(fold, "Assets/StreamingAssets/");
		}

		if (isBuildExe)
		{
			AssetDatabase.Refresh();
			string[] levels = {
				"Assets/Scenes/Init.unity",
			};
			Log.Info("开始EXE打包");
			Log.Info($"{relativeDirPrefix}/{exeName}");
			BuildPipeline.BuildPlayer(levels, $"{relativeDirPrefix}/{exeName}", buildTarget, buildOptions);
			Log.Info("完成exe打包");
		}
	}

	private static void GenerateVersionInfo(string dir)
	{
		VersionConfig versionProto = new VersionConfig();
		GenerateVersionProto(dir, versionProto, "");

		using (FileStream fileStream = new FileStream($"{dir}/Version.txt", FileMode.Create))
		{
			byte[] bytes = JsonHelper.ToJson(versionProto).ToByteArray();
			fileStream.Write(bytes, 0, bytes.Length);
		}
	}

	private static void GenerateVersionProto(string dir, VersionConfig versionProto, string relativePath)
	{
		foreach (string file in Directory.GetFiles(dir))
		{
			string md5 = MD5Helper.FileMD5(file);
			FileInfo fi = new FileInfo(file);
			long size = fi.Length;
			string filePath = relativePath == "" ? fi.Name : $"{relativePath}/{fi.Name}";

			versionProto.FileInfoDict.Add(filePath, new FileVersionInfo
			{
				File = filePath,
				MD5 = md5,
				Size = size,
			});
		}

		foreach (string directory in Directory.GetDirectories(dir))
		{
			DirectoryInfo dinfo = new DirectoryInfo(directory);
			string rel = relativePath == "" ? dinfo.Name : $"{relativePath}/{dinfo.Name}";
			GenerateVersionProto($"{dir}/{dinfo.Name}", versionProto, rel);
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值