예제 #1
0
    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);
    }
예제 #2
0
 /// <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);
 }
예제 #3
0
    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);
        }
    }
예제 #4
0
    /// <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);
    }
예제 #5
0
    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);
    }
예제 #6
0
    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);
    }
예제 #7
0
    /// <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);
    }
예제 #8
0
    /// <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);
    }
예제 #9
0
    /// <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, "确定");
    }
예제 #10
0
    /// <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);
    }
예제 #11
0
    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);
    }
예제 #12
0
    /// <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();
    }
예제 #13
0
    /// <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;
        }
    }