SpatialOS 的虚幻引擎开发套件 (GDK for Unreal) 的所有显著更改将记录在此页面中。
本更新日志的格式基于该 页面 形式,版本号遵从规范命名方式 (Semantic Versioning)。
- 使用
git pull
升级到虚幻引擎4.24.3
之后,您可能会丢失几个.isph
和.ispc
文件。这会导致构建引擎时产生 编译错误。您可以通过在您的 UnrealEngine 仓库根目录中运行git restore .
来解决此问题。
- 模拟玩家 worker 配置现在需要提供开发身份验证令牌和部署标志,而不是登录令牌和玩家身份令牌。要了解相关设置的示例,请参见 示例项目。
- 现已支持虚幻引擎
4.24.3
。您可以在 此处 找到引擎分支的4.24.3
版本。 - 添加一个新的变量:
QueuedOutgoingRPCWaitTime
。以下三种情况传出 RPC 会丢失:自发送 RPC 以来,已超过QueuedOutgoingRPCWaitTime
时间;Worker 实例不会具有接收 RPC 所需的管辖权 (如果您正在使用负载拆分或无缝分区);接收 RPC 的 Actor 正在被销毁。 - 在示例项目的本地部署中,您现在可以一键启动模拟玩家。要启动单个模拟玩家客户端,运行
LaunchSimPlayerClient.bat
。要启动十个模拟玩家客户端,运行Launch10SimPlayerClients.bat
。 - 添加对 UE4 网络分析器的支持,来测量 RPC 和 Actor 复制数据的相对大小。
- 添加一个
SpatialToggleMetricsDisplay
控制台命令。您必须启用bEnableMetricsDisplay
才能使指标显示可用。然后,在您想要显示指标的每个客户端上调用SpatialToggleMetricsDisplay
。 - 在模块化 UDP 网络堆栈中启用压缩。
- 关闭默认的 RPC 打包。您可以在
SpatialGDKSettings
中重新启用它。 - 当您开始本地部署,我们会检查所需的运行时端口是否被阻止。如果是,我们将显示一个对话框,询问您是否要取消阻止该端口的进程。
- 现在可以使用可配置的 Actor 组件
SpatialPingComponent
。这使 PlayerController 可以测量对它们有管辖权的服务端 worker 实例的 ping 时间。您可以通过GetPing()
访问最新的原始 ping 值,或访问存储在PlayerState
中的滚动平均值。 - 您可以使用
-AdditionalSchemaCompilerArguments="..."
命令行开关调用GenerateSchema
,GenerateSchemaAndSnapshots
和CookAndGenerateSchema
命令集,来输出其他已编译结构描述 (schema) 格式。如果不提供此开关,则输出仅包含结构描述符。此开关的值应该是可以直接传递给结构描述编译器的参数的子集 (例如--bundle_out="path/to/bundle.sb"
)。您可以在 结构描述编译器文档 中看到可能值的完整列表。 - 添加
AllowUnresolvedParameters
函数标记。此标记禁用在处理未解析参数的 RPC 期间发生的警告。要启用此标记,请使用蓝图,或将标记添加到UFUNCTION
宏。 - 如果您在启动云部署的时候,将
manual_worker_connection_only
标记设置为true
,会出现警告。 - 现已支持单服务器游戏世界的服务器关卡切换。对于使用无缝分区或负载拆分的游戏世界,暂不支持服务器关卡切换。
- 启动本地部署时,改进与结构描述生成相关的工作流。如果您在结构描述出错后尝试启动本地部署,会出现警告。
DeploymentLauncher
现在可以独立于目标部署启动模拟玩家部署。用法:DeploymentLauncher createsim <project-name> <assembly-name> <target-deployment-name> <sim-deployment-name> <sim-deployment-json> <sim-deployment-region> <num-sim-players> <auto-connect>
。- 如果定义了
WITH_EDITOR
,那么会使用HeartbeatTimeoutWithEditorSeconds
。这可以防止您在虚幻编辑器中运行 worker 实例进行调试时 worker 实例会断开连接的问题。 - 在
SpatialGDKSettings
中添加bAsyncLoadNewClassesOnEntityCheckout
设置。这允许 worker 实例在接收到有关实体的初始更新时,异步加载新的类。默认设置为false
。 - 为
Coordinates
、WorkerRequirementSet
、FRotator
和FVector
类添加IndexYFromSchema
函数。已经为这些类重新映射GetYFromSchema
函数,以在内部调用IndexYFromSchema
,这与该结构描述的其他实现一致。 - 客户端现在针对服务器上的结构描述文件验证其结构描述文件,并在文件不匹配时记录警告。
- 现对结构描述数据库中的条目进行排序以提高在虚幻编辑器中搜索资产的效率。
SpatialGDKSettings中
的BatchSpatialPositionUpdates
现在默认为false
。- 添加
bEnableNetCullDistanceInterest
(默认值为true
),以使客户端兴趣可以通过组件标记来显示。此功能与原生虚幻引擎客户的兴趣功能更接近。 - 添加
bEnableNetCullDistanceFrequency
(默认值为false
),以使客户端兴趣查询能够使用频率。您可以使用InterestRangeFrequencyPairs
和FullFrequencyNetCullDistanceRatio
配置此功能。 - 引入功能标记
bEnableResultTypes
(默认值为true
)。这会将兴趣查询配置为仅包含查询运行所需的组件集。根据您的游戏具体情况,这可能会节省带宽。 - 如果将
bEnableResultTypes
标记设置为true
,会禁用动态兴趣覆盖。 - 将开发验证设置从 Runtime Settings 面板移至 Editor Settings 面板。
- 添加在命令行中使用开发验证流程的选项。
- 添加按钮,可以在虚幻编辑器中生成开发验证令牌。要使用它,导航到 Edit > Project Setting > SpatialOS GDK for Unreal > Editor Settings > Cloud Connection。
- 添加新区域,您可以在其中配置启动参数以在移动设备上运行客户端。要使用它,请导航到 Edit > Project Setting > SpatialOS GDK for Unreal > Editor Settings > Mobile。
- 现可以在启动本地或云部署时选择要使用的运行时版本(在 Runtime Settings 中)。
- 如果将
--OverrideResultTypes
标记设置为true
,那么服务端 worker 实例将不再接收它们不拥有的 Actor 上关于服务器 RPC 组件的更新。这将减少启动负载拆分和无缝分区游戏中服务端 worker 实例的带宽。 - 现
InstallGDK
脚本会git clone
您检出的UnrealEngine
分支中UnrealGDK
和UnrealGDKExampleProject
的正确版本。它们读取UnrealGDKVersion.txt
和UnrealGDKExampleProjectVersion.txt
以确定正确的分支。 - 删除
bEnableServerQBI
属性和--OverrideServerInterest
标记。 - 为每个 RPC 失败添加自定义警告超时。
SpatialPingComponent
现还会报告指定数量的最近 ping 的平均 ping 测量。您可以使用PingMeasurementsWindowSize
指定要记录的测量数量,然后调用GetAverageData
获取测量数据。每当记录新的 ping 测量值时,都会广播一个委托OnRecordPing
。- Spatial Output Log 窗口现在会显示部署启动错误。
- 添加
bEnableClientQueriesOnServer
(默认值为false
)。如果启用了虚幻引擎开发套件的负载均衡器,它在服务器上进行的查询与在客户端上进行的查询相同。启用bEnableClientQueriesOnServer
后,对于服务端未接收到的关于实体的更新,客户端也不会收到。此前这种情况发生是因为服务端的兴趣查询配置不正确。 - 现在由
ControllerChannelNotListening
而导致AddPendingRPC
的失败,会记录一条警告。 - 启用负载拆分后,Actor 在本地服务器上具有的管辖权(
ROLE_Authority
)持续更长时间,以确保更多的原生虚幻引擎功能正常工作。 - 启用负载拆分后,如果您尝试在不是 Actor 组拥有者的服务器上生成 Actors,那么会记录错误并删除 Actors。
- GDK 现默认使用 SpatialOS 运行时 14.5.1 版本。
- 将配置设置
bPreventAutoConnectWithLocator
重命名为bPreventClientCloudDeploymentAutoConnect
并将其移至SpatialGDKSettings
。要使用此功能,请在SpatialGDKSettings
中启用该设置。 USpatialMetrics :: WorkerMetrics
设置为静态。- 现在,要连接到本地部署,在 Launch 下拉菜单中,点击 Connect to a local deployment ”并指定计算机的本地 IP 地址。
- 默认情况下启用的 RPC 环形缓冲区。在未来的版本中,将删除旧的 RPC 模式。
- 删除
bPackRPCs
属性和--OverrideRPCPacking
标记。 - 在 Actor 和 Actor 组件上添加
OnClientOwnershipGained
和OnClientOwnershipLost
事件。当将 Actor 添加到客户端的 PlayerController 的所有权层次结构中或从中删除时,就会触发这些事件。
- 删除实体后,队列中的 RPC 不再滥发日志。
- 现在,我们会尽可能早地应用
OverrideSpatialNetworking
命令行参数。以前,LocalDeploymentManager
在解析命令行之前查询了bSpatialNetworking
。 - 服务器现在对
AlwaysRelevant
Actor 保持兴趣。 - 现在,当玩家在观众模式时,
GetActorSpatialPosition
会返回玩家的最后一次同步位置。 - 默认的云启动配置现在为空。
- 修复当 GDK 尝试从未加载的类读取结构描述时发生的崩溃。
- 现可以正确处理(并最终解析)复制的结构体数组中未解析的对象引用。
- 修复因触发了不该触发的墓碑 (tombstone) 断言而导致虚幻编辑器崩溃的问题。
- 如果使用
bNetLoadOnClient=false
放置在关卡中的 Actor 退出了 worker 实例的视图,则如果重新进入视图,会重新加载该 Actor。 - 修复
SpatialDebugger
中的崩溃,该崩溃是因取消引用无效弱指针引起的。 - 修复使用
spatial cloud connect external
发生的连接错误。 - 命令行参数
receptionistHost <URL>
不再覆盖与127.0.0.1
的连接。 - 如果使用 Locator 将 worker 实例连接到部署,并使用需要 Receptionist 的 URL 发起
ClientTravel
,现在可以正常工作。 - 现在,您可以通过
USpatialStatics::GetWorkerFlag
而不是USpatialWorkerFlags::GetWorkerFlag
访问 worker 标记。 - 修复禁用 GDK 相关负载均衡时
SpatialDebugger
发生的崩溃。 - 在虚幻编辑器中操作时,结构描述 (schema) 数据库不再无法加载先前保存的状态。
- 如果您尝试启动云部署,则现在将根据需要运行
spatial auth
过程。在过去,部署会失败。 - 对连接日志消息进行较小的拼写修复。
- 现在,
GlobalStateManager
中的调试字符串在日志文件中显示 Actor 类名称。 - 递归处理收到的 RPC 时,服务器不再崩溃。
- 如果
SoftObjectPointers
尚未解析,GDK 不再崩溃,而是在解析它们之后按预期方式对其进行序列化。 - 修复在尚未完成加载的情况下为异步加载的包的一部分的类复制属性时发生的问题。
- 修复由结构描述造成的组件兴趣约束。
- 现在,GDK 会跟踪包含复制 Actor 引用的属性。这样,当它们引用的 Actor 移出并移回相关性时,GDK 可以再次解析它们。
- 由于缺少
SpatialDebugger
蓝图的结构描述,PIE 不再偶尔无法启动。 - 修复调用
RepNotify
指向该子对象的属性时,新创建的子对象具有空状态的问题。 - 修复已删除的、最初处于休眠状态的启动 Actor 仍然存在于其他 worker 实例上的问题。
- 现在,当启用负载均衡时,我们将强制激活 RPC 环形缓冲区,以便在管辖权更改时允许 RPC 迁移。
- 修复竞争条件,即正离开部署的客户端可能会将其 Actor 留在服务器上,长时间超时后会清理该 Actor。
- 修复由于
SpatialGameInstance
中的状态在从一个部署到另一个部署的过渡期间持续存在而导致的崩溃。 - 多次启动和停止 PIE 客户端时,GDK 不会再崩溃。
- 在解析未解析的对象时,如果影子数据未初始化,GDK 不会再崩溃。
- 修复在最近创建的 Actor 上发送组件 RPC 时偶尔出现的问题。
本节中列出的功能尚无法使用。但是,本着开放、开发的精神,我们记录了对 GDK 所做的每项更改。
- 增加 MacOS 系统的 SpatialOS 工具栏支持。
- 添加对 Android 的支持。
SpatialDebugger
worker 区域现在是长方体而不是平面,并且可以通过SpatialDebugger
中的设置调整其WorkerRegionVerticalScale
。- 添加
AuthorityIntent
组件,VirtualWorkerTranslation
组件和部分框架。未来将使用它们来控制负载均衡。 - 可使用
SpatialWorldSettings
按级别设置负载均衡策略和锁定策略。 - 添加新的 Runtime Settings 标记,以启用虚幻引擎开发套件负载均衡器。此功能正在开发中,尚未开放使用。现在,启用虚幻引擎开发套件负载均衡器,将根据定义的负载均衡策略为每个服务端 worker 实例创建一个查询。
- 提取负责获取 Actor 并生成将其表示为 SpatialOS 中的实体的 SpatialOS 组件数组的逻辑。现在,此逻辑位于
EntityFactory
中。 DeploymentLauncher
现可以解析 .pb.json 启动配置。