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