Language:
Page Info
Tags:
Engine Version:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

回放系统

回放系统总览

虚幻引擎 4 的回放系统可录制游戏进程在之后进行观看。从较高的层面而言,回放系统的工作原理是读取从内置复制系统中抽取的数据,与在联网环境下进行的游戏直播原理相似。设置为以多人游戏的方式复制数据的项目(即使项目实际上不含多人模式)均兼容回放系统,无需进行额外修改。其工作方式是将复制的数据传到回放流送器,由其处理过滤和存储数据的过程。回放系统尝试显示保存的回放时,它将拥有直播游戏中可用的全部复制信息,以及设计为只和回放相关的特殊数据域,并可从此数据重建游戏事件。

回放系统功能

回放系统的基础功能时开始或停止录制 demo,或播放之前录制的 demo。在播放模式中,回放系统支持命令暂停、改变播放速度,或跳至一个特定的时间点。此系统更高级的用法包括为回放添加文本标记(通常为元标记或游戏中的玩家名),或基于文本标记或版本信息对现有回放进行查询。回放系统可从 C++ 代码进行使用,主要通过 UGameInstanceUworld 类,或通过控制台命令或命令行参数。统一的 C++/蓝图 API 在打造过程中,将在未来的引擎版本中发布。

回放数据格式

在数据方面,回放包含三种游戏状态信息,以及部分额外的文字数据。开始时描述游戏世界开始状态的基线数据。作为游戏世界净变(从基线发生)快照的检查点将以玩家定义的固定间隔出现。各个检查点之间的空间由游戏世界中单独物体的增量变化所填充。游戏中的任意时刻均可被引擎快速而准确地重建:将世界场景初始化到开始状态,在选定时间前执行上个检查点中描述的变化,然后在检查点到达所需要的时间点后应用每个增量变化。回放中包含的文本数据由显示名(可在制作面向玩家的列表时使用)和用户定义文本标记(仅限 HTTP 流送器,可在搜索或过滤游戏列表时使用)组成。

向后兼容

从 4.13 版本开始,回放系统支持向后兼容。这意味着可以对版本进行修改(即添加或移除复制属性),并仍然加载和查看在原版本中录制的回放。这在多数情况下均为自动处理,因为回放系统将略过已被移除的老复制域,或默认使用已添加的新复制域。覆盖 UObjectSerialize 函数或任意结构的 NetSerialize 函数即可自定义此行为。注意:对于已自定义序列化的类,需要手动处理数据格式中的差别。有鉴于此,FArchive 现提供 EngineNetVerGameNetVer 函数,它们分别辨识引擎和游戏版本,以便调整回放数据,使其与当前版本匹配。

流送器

回放系统的流送器执行创建回放所需要的实际抽取和信息录制。将基于回放数据进行查看的不同方式使用不同的流送器。有三种不同的流送器,每种适用于不同的使用情况。默认为 NULL 流送器,将事件从主机直接录制到硬盘,因此最适合单机游戏和将回放保存在本地主玩家机器上的游戏。内存流送器在客户机上运行并在内存中保存数据,适合体育游戏中的“即时回放”功能或射击游戏中的“击杀镜头”。最后,HTTP 流送器用于通过 LAN 或网络发送回放数据到另一台及其,特别适合专属服务器游戏,或需要在线流送给大量观众,同时仍对玩家做出响应的游戏。

Tags