public void Copy(PublishPlatformCollection other)
 {
     foreach (var obj in other.plats)
     {
         PublishPlatformSet info = new PublishPlatformSet();
         info.Copy(obj);
         plats.Add(info);
     }
 }
 public void Copy(PublishPlatformSet other)
 {
     type = other.type;
     name = other.name;
     foreach (var obj in other.list)
     {
         PublishPlatformInfo info = new PublishPlatformInfo();
         info.Copy(obj);
         list.Add(info);
     }
 }
    /// <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, "确定");
    }
    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();
    }