虚幻引擎的 Online Subsystem
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、理解 Online Subsystem 的核心概念
- 1.1 什么是 Online Subsystem?
- 1.2 支持的平台服务
- 二、环境配置与基础设置
- 2.1 启用 Online Subsystem
- 三、 基础功能实现(C++/蓝图)
- 3.1 玩家登录(Identity)
- 3.2 创建/加入会话(Session)
- 四、 本地测试与调试
- 4.1 使用 Null 子系统测试
- 4.2 日志查看
- 五、进阶功能
- 5.1 好友与邀请
- 5.2 成就系统
- 官方链接[Online Subsystem](https://docs.unrealengine.com/5.3/en-US/online-subsystem-in-unreal-engine/)
前言
它是虚幻引擎中管理在线功能的核心框架,支持多种后端服务(如EOS、Steam、Xbox Live等)。
一、理解 Online Subsystem 的核心概念
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
1.1 什么是 Online Subsystem?
作用:一个抽象层,统一不同平台的在线服务(如登录、会话、好友、成就等)。
- 关键接口:
- IOnlineSubsystem:主入口,获取其他功能接口。
IOnlineSession:管理多人游戏会话(创建/加入房间、匹配)。
IOnlineIdentity:处理玩家身份验证(登录/登出)。
IOnlineFriends:好友列表管理。
IOnlineStore:内购功能。
1.2 支持的平台服务
默认支持:Null(本地测试)、EOS、Steam、Xbox Live、PSN等。
配置文件:通过 DefaultEngine.ini 切换不同平台的后端服务。
二、环境配置与基础设置
2.1 启用 Online Subsystem
- 修改 DefaultEngine.ini
- 在项目配置文件中指定使用的在线服务(例如用 Null 测试):
[OnlineSubsystem]
DefaultPlatformService=Null // 本地测试用
- 插件管理
- 在虚幻编辑器中启用 Online Subsystem 相关插件:
Edit > Plugins > Search “Online” → 启用 Online Subsystem Steam/EOS 等。
三、 基础功能实现(C++/蓝图)
3.1 玩家登录(Identity)
C++ 示例:
#include "OnlineSubsystem.h"
#include "OnlineIdentityInterface.h"void AMyPlayerController::Login()
{IOnlineSubsystem* OnlineSub = IOnlineSubsystem::Get();if (OnlineSub){IOnlineIdentityPtr Identity = OnlineSub->GetIdentityInterface();if (Identity.IsValid()){Identity->OnLoginCompleteDelegates->AddUObject(this, &AMyPlayerController::HandleLoginComplete);Identity->Login(0, FOnlineAccountCredentials("Type", "User", "Password"));}}
}void AMyPlayerController::HandleLoginComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error)
{if (bWasSuccessful) { UE_LOG(LogTemp, Warning, TEXT("登录成功!")); }
}
- 蓝图:
- 使用 Online Subsystem Blueprint Library 中的节点(如 Login、On Login Complete)。
3.2 创建/加入会话(Session)
- 创建会话:
- 示例:
IOnlineSessionPtr Session = OnlineSub->GetSessionInterface();
if (Session.IsValid())
{FOnlineSessionSettings Settings;Settings.bIsLANMatch = false; // 在线会话Settings.NumPublicConnections = 4; // 最大玩家数Session->CreateSession(0, "MySession", Settings);
}
- 加入会话:
- 通过 FindSessions 搜索可用房间,再调用 JoinSession。
四、 本地测试与调试
4.1 使用 Null 子系统测试
在 DefaultEngine.ini 中设置 DefaultPlatformService=Null,无需真实平台账号即可测试功能。
启动两个本地客户端(PIE 或独立进程)模拟多人联机。
4.2 日志查看
在输出日志中过滤 LogOnline,查看在线子系统的调试信息:
UE_LOG(LogOnline, Log, TEXT("Session created!"));
五、进阶功能
5.1 好友与邀请
使用 IOnlineFriends 接口获取好友列表:
IOnlineFriendsPtr Friends = OnlineSub->GetFriendsInterface();
Friends->ReadFriendsList(0, "default");
5.2 成就系统
通过 IOnlineAchievements 解锁成就:
IOnlineAchievementsPtr Achievements = OnlineSub->GetAchievementsInterface();
Achievements->WriteAchievements(0, AchievementId);