中EN
概念页

在线子系统与 EOS

Online Subsystem & EOS

更新于 2026-10-15 约 6 分钟UE5Online SubsystemOnline ServicesEOS会话身份

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 SubsystemOnline 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,跨平台代码要处理这种情况。
  1. Online Subsystem in Unreal Engine UE 5.8 文档
  2. Online Subsystem Session Interface in Unreal Engine UE 5.8 文档
  3. Online Subsystem Identity Interface in Unreal Engine UE 5.8 文档
  4. Overview of Online Services in Unreal Engine UE 5.8 文档(Beta)
  5. Online Subsystem EOS Plugin in Unreal Engine UE 5.8 文档

相关页面

游戏开发UDP 与游戏协议设计UDP & Game Protocol Design动作游戏的时间关键数据(输入、位姿、物理)只关心最新状态。TCP 的可靠有序流会在丢包时把头阻塞住;正确做法是游戏协议只走 UDP,自己做虚拟连接、按需可靠性与拥塞退避,并按数据类型选择「冗余重发」还是「直接丢弃旧包」。游戏开发多人网络游戏模型Multiplayer Networking Models多人游戏并不是共享同一份物理现实,而是每位玩家各自看到的近似。历史上主要两条路:对等锁步 (Peer-to-Peer Lockstep)(RTS 仍常用)与权威客户端/服务器 (Authoritative Client/Server)(动作/FPS 主流);后者再叠加客户端预测、插值与延迟补偿,把延迟藏进体验里。游戏开发 · UE5网络复制与 RPCNetwork Replication & RPCUE 采用服务器权威 (Server-Authoritative) 的客户端-服务器模型:游戏真正在服务器上进行,服务器把状态复制 (Replication) 给客户端,客户端通过远程过程调用 (Remote Procedure Call, RPC) 向服务器请求操作。开发者需要显式声明哪些 Actor、属性、函数要走网络,并借助所有权、网络角色、相关性、优先级控制“发给谁、发多少”。UE 5.8 提供通用复制系统、Replication Graph 和实验性的 Iris 三套复制系统。游戏开发 · UE5专用服务器Dedicated ServerUE 多人游戏采用客户端-服务器模型。监听服务器 (listen server) 由某个玩家的客户端兼任服务器;专用服务器 (dedicated server) 无头运行,不渲染画面,也没有本地玩家。专用服务器体积更小、房主没有不公平优势、能专注于玩法逻辑,适合大规模或竞技游戏。构建专用服务器需要源码版引擎和支持客户端-服务器的 C++ 项目,并要有 <ProjectServer.Target.cs。游戏开发 · UE5模块、插件与构建系统Modules, Plugins & Build SystemUE 的代码由模块 (Module) 组成:每个模块是一个独立编译单元,用 [模块名].Build.cs 声明依赖。插件 (Plugin) 是可按项目启用/禁用的代码与内容集合,用 .uplugin 描述,可包含多个模块。虚幻构建工具 (UnrealBuildTool, UBT) 根据 .Target.cs 和 .Build.cs(而不是 IDE 的 .sln)编译,默认把模块编成 DLL 由一个可执行文件加载,也可整体链接成单体 (Monolithic) 可执行文件。

输入关键词开始搜索

滚轮或双指缩放 · 拖动平移 · 双击放大 / 还原