using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace GeneralTools
{
public class OnPreprocessBuildDoing : IPreprocessBuild, IPostprocessBuild
{
public int callbackOrder { get { return 0; } }
///
/// 打包前
///
///
///
public void OnPreprocessBuild(BuildTarget target, string path)
{
CustomPlayerSettings();
CheckCertificatePath();
}
///
/// 打包后
///
///
///
public void OnPostprocessBuild(BuildTarget target, string path)
{
}
///
/// //代码编译完成时调用
///
[UnityEditor.Callbacks.DidReloadScripts]
static void OnScriptsEditOver()
{
//注册打包发布的事件;unity在打包发布的时候会判断buildPlayerHandler 是不是为null,为空就执行默认打包方法,不为空就执行注册的事件
BuildPlayerWindow.RegisterBuildPlayerHandler(OverridesBuildPlayer);
}
public static void OverridesBuildPlayer(BuildPlayerOptions BPOption)
{
//添加自己的逻辑
CertificateSetting setting = Resources.Load("Setting/CertificateSetting");
if (setting == null)
{
Debug.LogError("未找到CertificateSetting,请生成");
if (EditorUtility.DisplayDialog("提示", "未找到CertificateSetting,请生成", "生成"))
{
Menu.SetCertificate();
}
}
else
{
Debug.Log("开始打包,当前项目名称:" + (string.IsNullOrWhiteSpace(setting.productID) ? Application.productName : setting.productID));
BuildPlayerWindow.DefaultBuildMethods.BuildPlayer(BPOption);//调用unity默认的打包方法。取消打包,不用写其他代码
}
}
private static void CustomPlayerSettings()
{
PlayerSettings.runInBackground = true;
PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled;
PlayerSettings.usePlayerLog = false;
PlayerSettings.forceSingleInstance = true;
PlayerSettings.SplashScreen.show = false;
}
private static void CheckCertificatePath()
{
string path = DevicePath.CertificateProgramPath;
if (!File.Exists(path))
{
Debug.Log("未找到证书文件,生成默认证书");
CertificateManager.CreateOneCertificate();
}
}
}
}