【UE4】 补丁Patch 与 DLC
概述
- 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(可下载内容),也称“可下载资料包”
- 用于游戏发布后的内容扩展,如新增地图、新游戏模式、新剧情等
- 目前暂不支持增量更新
扩展:热更新
- 蓝图本身作为资源,可以热更新
- C++ 是编译型语言,因而无法热更行
- 可以使用 Lua 脚本来写业务逻辑,进行热更新
- UnLua
- sluaunreal
- 参考:UE 热更新:基于 UnLua 的 Lua 编程指南
补丁配置与版本迭代
游戏主体配置 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 补丁

- Release 1.2 等同于
版本迭代思路
维护两个文本信息
- 服务器更新的补丁列表 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 目录
- 关于 插件 Content 目录

至此 Project Launcher

参考
【UE4】 补丁Patch 与 DLC的更多相关文章
- 打补丁patch 命令使用
打补丁patch 命令使用 http://www.cnblogs.com/huanghuang/archive/2011/07/14/2106402.html patch 命令用于打补丁,补丁文件是使 ...
- 补丁(patch)的制作与应用
命令简介 用到的两个命令是diff和patch. diff diff可以比较两个东西,并可同时记录下二者的区别.制作补丁时的一般用法和常见选项为: diff [选项] 源文件(夹) 目的文件(夹) - ...
- 找不同diff-打补丁patch
Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,“稳”是重中之重,所以不能动不动就是换系统或是换这换那 ...
- 补丁patch 漏洞 bug或glitch
补丁patch漏洞 bug或glitch
- 使用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 ...
- GIT打补丁 - patch和diff应用
一. 准备工作: [root@guangzhou gittest]# git br * master [root@guangzhou gittest]# git chk -b patch-test1 ...
- 内核补丁 patch
https://www.kernel.org/diff/diffview.cgi?file=/pub/linux/kernel/v3.x/patch-3.18.12.xz
- 【UE4 C++】学习笔记汇总
UE4 概念知识 基础概念--文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] 反射机制 垃圾回收机制/算法 序列化 Actor 的生 ...
- 如何为Linux生成和打上patch
通过diff工具生成补丁, patch工具打上补丁. 在使用diff之前, 你需要保留一份未修改过的源码, 然后在其它地方修改源码的一份拷贝. diff对比这两份源码生成patch. 修改过的源码必须 ...
随机推荐
- [考试总结]noip模拟42
开始给了一个简单的题目,但我还是没有珍惜. 一个简简单单的树形 \(dp\),然而因为取模却不知道该如何比较大小.. 其实可以取 \(log\),然后我就梦中惊坐起,然后想到了魔法少女lbw 淦 然后 ...
- Selenium系列(八) - 截取完整页面和截取指定元素并保存为图片
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- shell脚本中的多行注释
shell 中注释的使用方法 1. 单行注释 单行注释最为常见,它是通过一个'#'来实现的.注意shell脚本的最开始部分"#!/bin/bash"的#号不是用来注释的. 2. 多 ...
- 除PerfDog之外,还有什么性能测试工具。
除PerfDog之外,还有什么性能测试工具. 高通的Snapdragon Profiler 下载地址:https://developer.qualcomm.com/software/snapdrago ...
- cmd中输出换行和转义字符
cmd 中输出换行和转义字符 今天想写一个安装 Windows 任务的 bat 脚本,在命令行界面输出换行和转义一些字符,居然搜索了好久才搜到正确操作,因此记录一下. 在命令行界面输出换行 echo. ...
- Elaticsearch基础概念
概述 elaticsearch是一个分布式的搜索引擎,它可以实现各种复杂的数据类型实现近实时的搜索功能,无论是结构化还是非结构化的数据,都能使用elaticsearch存储并且可以快速搜索.elati ...
- java web 项目中web.xml 详解
web.xml详述: web.xml 是每个Java web 项目的必备文件,又叫做部署描述符,Servlet规范中定义的,是web应用的配置文件. 概念: .部署描述符文件就像所有XML文件一样,必 ...
- php升级版本后的影响5.5->7.1
微信开发中之前常用到$GLOBALS['HTTP_RAW_POST_DATA'] ,但升级后这个参数不见了,导致了一系列错误, 可以用 file_get_contents('php://input') ...
- 3gcms导航,实现当前栏目高亮的办法
<volist name="menu" id="vo" offset="0" length='8' key='k'> <l ...
- jenkins自动构建前端项目(window,vue)
我们把一个多人协作的vue前端项目发布服务器,一般要经过以下步骤: git更新最新的代码 构建项目 把构建后的代码上传到服务器 如果用jenkins来构建的话,只需要点击一次构建按钮,就可以自动完成以 ...