在线子系统与 EOS
Online Subsystem & EOS
Online Subsystem (OSS) 是 UE 访问 Steam、Xbox Live、Epic 等在线服务的统一抽象:按功能分成身份 (Identity)、会话 (Session)、好友、成就等接口,所有远程操作都是异步的,用委托回调。UE 5.1 起新增了 Online Services 插件(5.8 中仍为 Beta),返回 TOnlineAsyncOpHandle 句柄。Epic Online Services 通过 OSS EOS 插件接入;在 Steam 等其他平台发行时,可以再叠加 EOS Plus 插件。
设计思想
OSS 及其接口为在线服务提供统一的访问方式;面向多平台或多服务发行时,开发者只需为每个服务调整配置。由于要和各种在线服务异步通信,所有远程操作都通过委托 (Delegate) 返回,并保证委托一定会被调用,成功和失败走同一条代码路径。功能按服务专属的接口分组(好友、成就……);某个服务不支持的函数可以直接返回 false。更复杂的操作由在线异步任务管理器 (Online Asynchronous Task Manager) 调度,任务可以声明依赖,互不相关的任务并行执行,有先后顺序的串行执行。(Online Subsystem in Unreal Engine)
基础模块 OnlineSubsystem 负责定义并向引擎注册各服务的模块;初始化时尝试加载 Engine.ini 中指定的默认在线服务模块。(Online Subsystem in Unreal Engine)模块与插件机制见 模块、插件与构建系统。
身份接口
Login 接收本地玩家的凭据 (FOnlineAccountCredentials) 尝试登录;AutoLogin 自动生成凭据或从命令行读取。无论成功与否都会调用 FOnLoginCompleteDelegate,登录状态变化时调用 FOnLoginStatusChangedDelegate。登录失败时可以用 ExternalUI 接口让用户在服务自带的界面中手动登录;有些平台只支持这种方式。本地玩家有三种状态:在线登录、只登录本地档案、未登录。(Online Subsystem Identity Interface in Unreal Engine)
会话接口
会话的特征由 FOnlineSessionSettings 描述。下图按官方文档整理了常用调用及其完成回调:
flowchart LR A[CreateSession] -->|OnCreateSessionComplete| B["会话存在"] B --> U["UpdateSession 改设置"] F["FindSessions 传 FOnlineSessionSearch"] -->|OnFindSessionsComplete| R[SearchResults] R --> J[JoinSession] J -->|OnJoinSessionComplete| B B --> D[DestroySession] D -->|OnDestroySessionComplete| X["清理"]
除了图中的调用,还可以用 FindFriendSession 跟随好友加入,用 SendSessionInviteToFriend(s) 邀请好友;支持匹配的平台可以调用 StartMatchmaking。(Online Subsystem Session Interface in Unreal Engine)会话负责「找到并进入同一场游戏」,进入后的状态同步由 网络复制与 RPC 负责,服务器形态见 专用服务器。
Online Services(UE 5.1+,Beta)
UE 现在提供两套框架:Online Services 和 Online Subsystem。Online Services 插件 5.8 中标为 Beta,按服务专属接口组织(Achievements、Auth、Connectivity、ExternalUI、Lobbies、Privileges、Session……),所有远程操作返回 TOnlineAsyncOpHandle,保证调用 OnComplete 回调。官方建议:近期就要发售的项目,或不打算升级到 UE 5.1 之后版本的项目,继续用 Online Subsystem。Online Services 初始化时加载 DefaultEngine.ini 中指定的默认服务模块,标识无效或模块加载失败时返回 null。(Overview of Online Services in Unreal Engine)
| Online Subsystem | Online Services | |
|---|---|---|
| 状态 | 成熟 | Beta(5.8) |
| 异步模型 | 委托 | TOnlineAsyncOpHandle + OnComplete |
| 官方建议 | 近期发售的项目 | 面向 5.1 之后版本的项目 |
EOS 插件
Epic Online Services (EOS) 是与引擎无关的跨平台在线服务,提供成就、排行榜、内购、语音、好友等功能。OSS EOS 插件建立在 OSS 之上,把 EOS SDK 的通信封装进插件,因此不必直接写 EOS SDK 代码;需要先在 EOS Developer Portal 注册产品,再启用和配置插件(Client ID、Client Secret 等)。(Online Subsystem EOS Plugin in Unreal Engine)
登录逻辑:同时启用 Epic Account Services (EAS) 和 Connect Interface 时,用非 EOS 平台(如 Steam)的外部凭据调用 EOS_Auth_Login;只启用 Connect 时调用 EOS_Connect_Login。两种方式都需要配置身份提供方 (Identity Provider)。Presence 数据只在使用 EAS 时可用。(Online Subsystem EOS Plugin in Unreal Engine)
EOS Plus(EOS + 基础平台)把 EOS 和 Steam、主机等平台结合,提供自动会话镜像等功能。官方规则:在 Epic Games Store 发行只用 OSS EOS;在其他平台发行时再叠加 OSS EOS Plus。EOS Plus 是临时方案,相应功能会逐步被 EOS SDK 原生支持取代,目前是 Beta,功能覆盖有限。(Online Subsystem EOS Plugin in Unreal Engine)
取舍
- 框架选择以发售时间为准:近期发售用 OSS;新项目可以评估 Online Services,但要接受 Beta 的风险。
- 所有接口都是异步的,逻辑应写在完成回调里,不要假设调用返回时操作已经完成(据设计归纳)。
- 平台不支持的功能会直接返回 false,跨平台代码要处理这种情况。
出处
- Online Subsystem in Unreal Engine UE 5.8 文档
- Online Subsystem Session Interface in Unreal Engine UE 5.8 文档
- Online Subsystem Identity Interface in Unreal Engine UE 5.8 文档
- Overview of Online Services in Unreal Engine UE 5.8 文档(Beta)
- Online Subsystem EOS Plugin in Unreal Engine UE 5.8 文档