static void ShowWindow(ePublishPlatformType type) { PublishManager.Instance.Setup(); string title_name = PublishUtils.GetPlatformNameByType(type); PublishWindow abWindow = EditorWindow.GetWindowWithRect <PublishWindow>(new Rect(0, 0, 1000, 800), false, title_name, true); abWindow.Setup(type); }
/// <summary> /// 获取对应平台配置表数据 /// </summary> /// <param name="type">平台类型</param> /// <returns></returns> public PublishPlatformSet GetPlatformConfig(ePublishPlatformType type) { foreach (var obj in m_PlatformConfig.plats) { if (obj.type == (int)type) { return(obj); } } return(null); }
public PublishCachePlatformInfo GetCachaPlatformConfig(ePublishPlatformType type) { PublishCachePlatformInfo info; if (m_CachePlatformInfo.DicInfo.TryGetValue(type, out info)) { return(info); } else { info = new PublishCachePlatformInfo(); m_CachePlatformInfo.DicInfo.Add(type, info); return(info); } }
/// <summary> /// 平台类型转名称 /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetPlatformNameByType(ePublishPlatformType type) { switch (type) { case ePublishPlatformType.Android: return("Android"); case ePublishPlatformType.iOS: return("IOS"); case ePublishPlatformType.Win64: return("Win64"); case ePublishPlatformType.Win32: return("Win32"); case ePublishPlatformType.WebGL: return("WebGL"); } return(string.Empty); }
public static BuildTargetGroup GetTargetGroupByType(ePublishPlatformType type) { switch (type) { case ePublishPlatformType.Android: return(BuildTargetGroup.Android); case ePublishPlatformType.iOS: return(BuildTargetGroup.iOS); case ePublishPlatformType.Win32: return(BuildTargetGroup.Standalone); case ePublishPlatformType.Win64: return(BuildTargetGroup.Standalone); case ePublishPlatformType.WebGL: return(BuildTargetGroup.WebGL); } return(BuildTargetGroup.Unknown); }
public static BuildTarget GetBuildTargetByType(ePublishPlatformType type) { switch (type) { case ePublishPlatformType.Android: return(BuildTarget.Android); case ePublishPlatformType.iOS: return(BuildTarget.iOS); case ePublishPlatformType.Win64: return(BuildTarget.StandaloneWindows64); case ePublishPlatformType.Win32: return(BuildTarget.StandaloneWindows); case ePublishPlatformType.WebGL: return(BuildTarget.WebGL); } return(BuildTarget.NoTarget); }
/// <summary> /// 发布目录 /// </summary> /// <returns></returns> public static string GetPublishPath(ePublishPlatformType type) { string target_dir = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/')); switch (type) { case ePublishPlatformType.Android: target_dir = target_dir + "/build/Android"; break; case ePublishPlatformType.iOS: target_dir = target_dir + "/build/IOS"; break; case ePublishPlatformType.Win64: target_dir = target_dir + "/build/Win64"; break; case ePublishPlatformType.Win32: target_dir = target_dir + "/build/Win32"; break; case ePublishPlatformType.WebGL: target_dir = target_dir + "/build/WebGL"; break; } return(target_dir); }
/// <summary> /// 发布一个 /// </summary> private static void BuildOne(string publish_path, ePublishPlatformType target, PublishPlatformSet platform_config, PublishPlatformInfo platform_info, PublishCacheChannelInfo cache_channel_info, PublishCachePlatformInfo cache_platform_info) { Log.Info("正在发布版本:" + platform_info.PackageName); BuildTarget build_target = GetBuildTargetByType(target); BuildTargetGroup target_group = GetTargetGroupByType(target); string[] scenes = FindEnabledEditorScenes(); //设置发布选项 BulidTarget(target, platform_info, cache_channel_info, cache_platform_info); //发布 EditorUserBuildSettings.SwitchActiveBuildTarget(target_group, build_target); BuildPipeline.BuildPlayer(scenes, GetSavePath(publish_path, target, platform_info.PackageName), build_target, BuildOptions.None); Log.Info("发布完成一个:" + platform_info.PackageName); }
/// <summary> /// 遍历所有需要发布的平台 /// </summary> /// <param name="scenes"></param> /// <param name="target_dir"></param> /// <param name="build_target"></param> /// <param name="build_options"></param> private static void PublishAll(string publish_path, ePublishPlatformType target, PublishPlatformSet platform_config, PublishCachePlatformInfo cache_platform_info) { string publish_packet = ""; PublishPlatformInfo platform_info; PublishCacheChannelInfo cache_channel_info; for (int i = 0; i < platform_config.list.Count; ++i) { platform_info = platform_config.list[i]; cache_channel_info = PublishManager.Instance.GetCachaChannelConfig(platform_info.Name); if (cache_channel_info.IsBuild) { BuildOne(publish_path, target, platform_config, platform_info, cache_channel_info, cache_platform_info); publish_packet += platform_info.PackageName + "\n"; } } EditorUtility.DisplayDialog("提示", "发布完成,以下是发布的版本:\n" + publish_packet, "确定"); }
/// <summary> /// 保存路径 /// </summary> private static string GetSavePath(string publish_path, ePublishPlatformType platform_type, string app_name) { string target_path = ""; string target_dir = publish_path; switch (platform_type) { case ePublishPlatformType.Android: target_path = target_dir + "/" + app_name + ".apk"; break; case ePublishPlatformType.iOS: target_path = target_dir + "/" + app_name + ".ipa"; break; case ePublishPlatformType.Win32: case ePublishPlatformType.Win64: target_path = target_dir + "/" + app_name + ".exe"; break; case ePublishPlatformType.WebGL: //TODO break; } //每次build删除之前的残留 if (Directory.Exists(target_dir)) { if (File.Exists(target_path)) { File.Delete(target_path); } } else { Directory.CreateDirectory(target_dir); } return(target_path); }
public void Setup(ePublishPlatformType type) { Log.Debug("[publish]打包平台:" + PublishUtils.GetPlatformNameByType(type)); m_PlatformType = type; m_CachePlatformInfo = PublishManager.Instance.GetCachaPlatformConfig(type); if (m_CachePlatformInfo == null) { Log.Error("[publish]平台缓存读取错误:" + type); Close(); return; } m_PlatformConfig = PublishManager.Instance.GetPlatformConfig(type); if (m_PlatformConfig == null) { Log.Error("[publish]平台配置表信息读取错误:" + type); Close(); return; } m_PublishPath = PublishUtils.GetPublishPath(m_PlatformType); }
/// <summary> /// 发布 /// </summary> public static void StartPublish(string publish_path, ePublishPlatformType target, PublishPlatformSet platform_config, PublishCachePlatformInfo cache_platform_info) { //1.有效性校验 //判断是否有勾选发布平台 bool has_select_build = false; PublishPlatformInfo platform_info; PublishCacheChannelInfo cache_channel_info; for (int i = 0; i < platform_config.list.Count; ++i) { platform_info = platform_config.list[i]; cache_channel_info = PublishManager.Instance.GetCachaChannelConfig(platform_info.Name); if (cache_channel_info.IsBuild) { has_select_build = true; break; } } if (!has_select_build) { EditorUtility.DisplayDialog("错误", "没有选择需要发布的版本", "确定"); return; } //发布路径 if (string.IsNullOrEmpty(publish_path)) { EditorUtility.DisplayDialog("错误", "发布路径错误", "确定"); return; } ///2.发布 PublishAll(publish_path, target, platform_config, cache_platform_info); ///3.发布完成 PublishManager.Instance.OnPublishComplete(); }
/// <summary> /// 设置发布选项 /// </summary> /// <param name="target"></param> /// <param name="platform_info"></param> /// <param name="cache_channel_info"></param> /// <param name="cache_plat_info"></param> public static void BulidTarget(ePublishPlatformType target, PublishPlatformInfo platform_info, PublishCacheChannelInfo cache_channel_info, PublishCachePlatformInfo cache_plat_info) { BuildTarget buildTarget = GetBuildTargetByType(target); BuildTargetGroup targetGroup = GetTargetGroupByType(target); ///1.全局 PlayerSettings.companyName = "广州硕星"; PlayerSettings.productName = "机甲军团"; ///2.Resolution and Presentatio UIOrientation orientation = UIOrientation.LandscapeLeft; switch (cache_plat_info.Orientation) { case ScreenOrientation.AutoRotation: orientation = UIOrientation.AutoRotation; break; case ScreenOrientation.LandscapeLeft: orientation = UIOrientation.LandscapeLeft; break; case ScreenOrientation.LandscapeRight: orientation = UIOrientation.LandscapeRight; break; case ScreenOrientation.Portrait: orientation = UIOrientation.Portrait; break; case ScreenOrientation.PortraitUpsideDown: orientation = UIOrientation.PortraitUpsideDown; break; } PlayerSettings.defaultInterfaceOrientation = orientation; PlayerSettings.use32BitDisplayBuffer = false; ///3.Icon ///4.Splash Image PlayerSettings.SplashScreen.show = cache_plat_info.EnableUnitySplash; PlayerSettings.SplashScreen.showUnityLogo = cache_plat_info.EnableUnitySplash; ///5.RenderPath UnityEditor.Rendering.TierSettings ts = new UnityEditor.Rendering.TierSettings(); ts.renderingPath = cache_plat_info.RenderPath; UnityEditor.Rendering.EditorGraphicsSettings.SetTierSettings(targetGroup, UnityEngine.Rendering.GraphicsTier.Tier2, ts); ///6.BundleIdentifier PlayerSettings.applicationIdentifier = platform_info.BundleIdentifier; PlayerSettings.bundleVersion = platform_info.BundleVersion; ///7.预定义宏 if (!string.IsNullOrEmpty(platform_info.CompileDefine)) { PlayerSettings.SetScriptingDefineSymbolsForGroup(targetGroup, platform_info.CompileDefine); } ///8.IL2CPP if (target == ePublishPlatformType.Android || target == ePublishPlatformType.iOS) { switch (cache_plat_info.ScriptBackend) { case eScriptingImplementation.IL2CPP: PlayerSettings.SetScriptingBackend(targetGroup, ScriptingImplementation.IL2CPP); break; case eScriptingImplementation.Mono2x: PlayerSettings.SetScriptingBackend(targetGroup, ScriptingImplementation.Mono2x); break; } } ///9.net版本 ApiCompatibilityLevel api_level = ApiCompatibilityLevel.NET_2_0_Subset; switch (cache_plat_info.ApiLevel) { case eApiCompatibilityLevel.NET_2_0: api_level = ApiCompatibilityLevel.NET_2_0; break; case eApiCompatibilityLevel.NET_2_0_Subset: api_level = ApiCompatibilityLevel.NET_2_0_Subset; break; } PlayerSettings.SetApiCompatibilityLevel(targetGroup, api_level); ///9.gpu蒙皮 PlayerSettings.gpuSkinning = cache_plat_info.GUPSkin; switch (target) { case ePublishPlatformType.Android: HandleAndroidPlayerSetting(buildTarget, targetGroup, platform_info, cache_channel_info, cache_plat_info); break; case ePublishPlatformType.iOS: HandleIOSPlayerSetting(buildTarget, targetGroup, platform_info, cache_channel_info, cache_plat_info); break; case ePublishPlatformType.Win64: case ePublishPlatformType.Win32: HandleWinPlayerSetting(buildTarget, targetGroup, platform_info, cache_channel_info, cache_plat_info); break; case ePublishPlatformType.WebGL: HandleWebGLPlayerSetting(buildTarget, targetGroup, platform_info, cache_channel_info, cache_plat_info); break; } }