概述

  • UE4 中主要使用 Project Launcher 来进行补丁和DLC的制作
  • 补丁与 DLC 都需要基于某个版本而制作
  • 补丁 与 DLC 最后以 Pak 形式表现,
    • 补丁的 pak 可以重命名,但最后以 _p.pak 结尾
  • Pak 会根据 PakOrder 来排序挂载
    • Paks 目录下 ,项目名开头的 PakOrder = 4;非项目名开头的 PakOrder 与上一级目录的 PakOrder 相同
    • 项目名/Content 目录下的 PakOrder = 3;
    • Engine/Content 目录下的 PakOrder = 2;
    • Saved 目录下的 PakOrder = 1;
    • _p.pak PakOrder额外加100
    • n_p.pak PakOrder额外加 n*100+100

补丁 Patch

  • 对发布之后的版本进行更新,称之为打补丁
  • 通常用于
    • 内容更新
    • 解决已知问题
    • 修复版本漏洞
  • 打补丁的方法
    • 保留原始版本或之前版本中的文件,但添加一个指向新内容的指针
    • 使用二进制补丁转换原始版本中的内容

DLC

  • Downloadable Content(可下载内容),也称“可下载资料包”
  • 用于游戏发布后的内容扩展,如新增地图、新游戏模式、新剧情等
  • 目前暂不支持增量更新

扩展:热更新


补丁配置与版本迭代

游戏主体配置 V1.0

  • 创建 BP_Patch 并放置到场景中,配置 Project Launcher 打包,设为 Release 1.0

补丁配置 V1.1

  • 修改 BP_Patch 代码

  • 配置 Project Launcher

    • 基于1.0 打包,当前补丁我们假设为 patch 1.1
    • 并将当前关卡 使用 release 的打包配置,更改为 Release 1.1 进行打包(后续要用到)

  • 打包 输出 DesignPatterns-WindowsNoEditor_0_P.pak

    • 方便起见,重命名为 DesignPatterns-BaseV1.0_11_P.pak,其中 V1.0 代表 Release 1.0,11 代表 Patch 1.1
    • 复制到 Release 的 WindowsNoEditor\DesignPatterns\Content\Paks 目录下
  • 测试结果对比

补丁配置 V1.2

  • 创建 BP_Patch2 并放置到场景中

  • 配置 Project Launcher ,打包两个版本。并将补丁复制到对应 Release 的 WindowsNoEditor\DesignPatterns\Content\Paks 目录下

    • 基于 release 1.0 打包 patch 1.2,输出 DesignPatterns-BaseV1.0_12_P.pak
    • 基于 release 1.1 打包 patch 1.2,输出 DesignPatterns-BaseV1.0_12_P.pak
  • 测试结果如下

    • Release 1.2 等同于

      • 基于 Release 1.0 的基础包,打上 BaseV1.0_11、BaseV1.1_12 两个补丁
      • 基于 Release 1.0 的基础包,打上 BaseV1.0_12 补丁
      • 基于 Release 1.1 的基础包,打上 BaseV1.1_12 补丁

版本迭代思路

  • 维护两个文本信息

    • 服务器更新的补丁列表 server_patch_list.json
    • 本地的补丁更新情况记录 local_patch_list.json,记录当前版本号以及已更新的补丁
  • 启动时从 server_patch_list 读取补丁列表信息,对比 local_patch_list,

    • 如果 local_patch_list 没有则下载对应版本的补丁
    • 如果多个小版本合并为一个版本,则删除原来已下载的小版本,再下载合并后的版本
  • pak 删除与添加,涉及卸载和挂载,使用时具体分析,下图为举例示例,非实际应用


DLC 配置

  • UE4 DLC 以插件形式存在,因此第一步先创建插件

  • 在C++工程 .build.cs 添加插件模块,模块名为插件名,编译

  • 在 插件的 Content 目录下创建新的场景、资源

  • 配置 Project Launcher

    • 打包后的路径

      \Plugins\[插件名]\Saved\StagedBuilds\WindowsNoEditor\[项目名]\Plugins\[插件名]\Content\Paks\WindowsNoEditor

  • 测试结果

    • 关于 插件 Content 目录

      • File - > Package - > 平台 打包,默认会将插件 Content 目录一起打包进去
      • Project Launcher 打包 Release ,默认不打包插件 Content 目录
      • Project Launcher 打包 DLC ,默认只打包插件 Content 目录

  • 至此 Project Launcher


参考

【UE4】 补丁Patch 与 DLC的更多相关文章

  1. 打补丁patch 命令使用

    打补丁patch 命令使用 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106402.html patch 命令用于打补丁,补丁文件是使 ...

  2. 补丁(patch)的制作与应用

    命令简介 用到的两个命令是diff和patch. diff diff可以比较两个东西,并可同时记录下二者的区别.制作补丁时的一般用法和常见选项为: diff [选项] 源文件(夹) 目的文件(夹) - ...

  3. 找不同diff-打补丁patch

    Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,“稳”是重中之重,所以不能动不动就是换系统或是换这换那 ...

  4. 补丁patch 漏洞 bug或glitch

    补丁patch漏洞 bug或glitch    

  5. 使用opatch工具 打补丁Patch 21352635 -(Database Patch Set Update 11.2.0.4.8)

    Patch 21352635 - Database Patch Set Update 11.2.0.4.8 一.OPatch工具检查及升级 OPatch工具包,在安装目录$ORACLE_HOME下,P ...

  6. GIT打补丁 - patch和diff应用

    一. 准备工作: [root@guangzhou gittest]# git br * master [root@guangzhou gittest]# git chk -b patch-test1 ...

  7. 内核补丁 patch

    https://www.kernel.org/diff/diffview.cgi?file=/pub/linux/kernel/v3.x/patch-3.18.12.xz

  8. 【UE4 C++】学习笔记汇总

    UE4 概念知识 基础概念--文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] 反射机制 垃圾回收机制/算法 序列化 Actor 的生 ...

  9. 如何为Linux生成和打上patch

    通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须 ...

随机推荐

  1. hibernate01

    什么是hibernate ORM框架/持久层框架 jdbc的一个框架 object reference mapping 通过管理对象来改变数据库中的数据 通过管理对象来操作数据库 hibernate的 ...

  2. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  3. Spring事务管理回滚问题

    Spring事务管理不能回滚问题 在前段时间学习SpringMVC的练习中,碰到声明式事务管理时,事务不能回滚的情况,通过查看博客和资料,解决了问题. 原因 导致Spring事务管理不能回滚的原因有两 ...

  4. Docker入门之zabbix-agent篇

    在client端启动zabbix-agent服务 启动zabbix-agent有如下2种方式: agent start root@lykj-45:/srv# ls leyao zabbix zabbi ...

  5. GridView控件使用

    增加显示列gridView.Columns.AddVisible("AgentName", "姓名");设置是否为只读gridView1.OptionsBeha ...

  6. javassist 使用笔记

    javassist Javassist 是一个开源的分析.编辑和创建Java字节码的类库.其主要的优点,在于简单,而且快速.直接使用 java 编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构 ...

  7. 妙用 background 实现花式文字效果

    本文将讲解如何利用 background 系列属性,巧妙的实现一些花式的文字效果.通过本文,你将可以学到: 通过 background-size 与 background-position 实现酷炫的 ...

  8. 用Java写了一个程序,将一个Mysql库中的表,迁移到另外一个server上的Mysql库中

    用Navicat做数据迁移,因为数据量比较大,迁移过过程中一个是进展不直观,另外就是cpu占用率高的时候,屏幕跟死机了一样点不动按钮,不好中断. 想了想,干脆自己写一个. 在网上找了一个sqllite ...

  9. math.h库详解

    sin(double) cos(double) tan(double) 分别返回正弦,余弦,正切 #include<iostream> #include<math.h> usi ...

  10. centos7 未启用swap导致内存使用率过高。

    情况描述: 朋友在阿里云上有一台系统为CentOS7的VPS,内存为2GB,用于平时开发自己的项目时测试使用: 他在上面运行了5个docker实例,运行java程序:还有一个mysql服务: 上述5个 ...