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);
		}
	}
}

你可能感兴趣的:(工作中有用的封装好的代码)