Skip to content

Instantly share code, notes, and snippets.

@eddyrainy
Last active July 6, 2020 15:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eddyrainy/de91c0b833b1032f95148f12c16e6daf to your computer and use it in GitHub Desktop.
Save eddyrainy/de91c0b833b1032f95148f12c16e6daf to your computer and use it in GitHub Desktop.
更新日志:虚幻引擎开发套件 0.9.0 版本

更新日志:虚幻引擎开发套件 0.9.0 版本

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="..." 命令行开关调用 GenerateSchemaGenerateSchemaAndSnapshotsCookAndGenerateSchema 命令集,来输出其他已编译结构描述 (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
  • CoordinatesWorkerRequirementSetFRotatorFVector 类添加 IndexYFromSchema 函数。已经为这些类重新映射 GetYFromSchema 函数,以在内部调用 IndexYFromSchema,这与该结构描述的其他实现一致。
  • 客户端现在针对服务器上的结构描述文件验证其结构描述文件,并在文件不匹配时记录警告。
  • 现对结构描述数据库中的条目进行排序以提高在虚幻编辑器中搜索资产的效率。
  • SpatialGDKSettings中BatchSpatialPositionUpdates 现在默认为 false
  • 添加 bEnableNetCullDistanceInterest(默认值为 true),以使客户端兴趣可以通过组件标记来显示。此功能与原生虚幻引擎客户的兴趣功能更接近。
  • 添加 bEnableNetCullDistanceFrequency(默认值为 false),以使客户端兴趣查询能够使用频率。您可以使用 InterestRangeFrequencyPairsFullFrequencyNetCullDistanceRatio 配置此功能。
  • 引入功能标记 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 分支中 UnrealGDKUnrealGDKExampleProject 的正确版本。它们读取UnrealGDKVersion.txtUnrealGDKExampleProjectVersion.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 组件上添加 OnClientOwnershipGainedOnClientOwnershipLost 事件。当将 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 启动配置。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment