虚幻引擎的 Online Subsystem

发布于:2025-06-20 ⋅ 阅读:(13) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

它是虚幻引擎中管理在线功能的核心框架,支持多种后端服务(如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);

官方链接Online Subsystem


网站公告

今日签到

点亮在社区的每一天
去签到