You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unreal Engine EOS会话创建成功但其他客户端无法搜索到求助

解决EOS会话创建后无法被其他客户端搜索到的问题

以下是针对你的代码和问题的排查与修复步骤:

1. 确认会话创建是否真的成功(添加创建完成回调的错误检查)

你目前没有实现OnCreateSessionCompleted的完整逻辑,无法确认会话是否无错误创建。添加以下代码,排查会话创建时的潜在错误:

void UEOS_GameInstance::OnCreateSessionCompleted(FName SessionName, bool bWasSuccessful)
{
    if (bWasSuccessful)
    {
        UE_LOG(LogTemp, Log, TEXT("会话创建成功: %s"), *SessionName.ToString());
    }
    else
    {
        UE_LOG(LogTemp, Error, TEXT("会话创建失败: %s"), *SessionName.ToString());
        IOnlineSubsystem* SubsystemRef = Online::GetSubsystem(GetWorld());
        if (SubsystemRef)
        {
            IOnlineSessionPtr SessionPtr = SubsystemRef->GetSessionInterface();
            if (SessionPtr)
            {
                FString ErrorStr;
                SessionPtr->GetLastError()->ToString(ErrorStr);
                UE_LOG(LogTemp, Error, TEXT("创建错误详情: %s"), *ErrorStr);
            }
        }
    }
}

2. 修正会话创建的可见性设置

当前会话设置缺少允许公开发现的关键参数,修改创建会话的FOnlineSessionSettings配置:

FOnlineSessionSettings SessionCreationInfo;
SessionCreationInfo.bIsDedicated = bIsDedicatedServer;
SessionCreationInfo.bAllowInvites = true;
SessionCreationInfo.bIsLANMatch = bIsLanServer;
SessionCreationInfo.NumPublicConnections = NumberOfPublicConnections;
// 先禁用Lobby关联,排除干扰,测试成功后再开启
SessionCreationInfo.bUseLobbiesIfAvailable = false;
SessionCreationInfo.bUsesPresence = true;
SessionCreationInfo.bShouldAdvertise = true;
// 新增:允许非好友通过在线服务发现会话
SessionCreationInfo.bAllowJoinViaPresence = true;
SessionCreationInfo.bAllowJoinViaPresenceFriendsOnly = false;
SessionCreationInfo.Set(SEARCH_KEYWORDS, FString("RandonHi"), EOnlineDataAdvertisementType::ViaOnlineServiceAndPing);

3. 修正会话搜索的过滤条件

当前搜索代码清空了所有参数,且未匹配创建时的关键词或存在状态,修改FindSessionAndJoin方法:

void UEOS_GameInstance::FindSessionAndJoin()
{
    UE_LOG(LogTemp, Warning, TEXT("尝试查找会话"));

    IOnlineSubsystem* SubsystemRef = Online::GetSubsystem(this->GetWorld());

    FString SubsystemName = SubsystemRef->GetSubsystemName().ToString();

    UE_LOG(LogTemp, Warning, TEXT("当前子系统: %s"), *SubsystemName);

    if (SubsystemRef)
    {
        IOnlineSessionPtr SessionPtrRef = SubsystemRef->GetSessionInterface();
        if (SessionPtrRef)
        {
            UE_LOG(LogTemp, Warning, TEXT("生成搜索查询"));
            SessionSearch = MakeShareable(new FOnlineSessionSearch());
            SessionSearch->bIsLanQuery = false;
            SessionSearch->MaxSearchResults = 20;
            // 不要清空默认搜索参数,保留EOS所需的基础过滤
            // SessionSearch->QuerySettings.SearchParams.Empty();
            // 匹配创建会话时设置的关键词
            SessionSearch->QuerySettings.Set(SEARCH_KEYWORDS, FString("RandonHi"), EOnlineComparisonOp::Equals);
            // 搜索启用了Presence的会话(与创建时的bUsesPresence=true对应)
            SessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
            
            SessionPtrRef->OnFindSessionsCompleteDelegates.AddUObject(this, &UEOS_GameInstance::OnFindSessionCompleted);
            SessionPtrRef->FindSessions(0, SessionSearch.ToSharedRef());
        }
    }
}

4. 环境与权限检查

  • 确保所有测试客户端都登录了有效的EOS账号,且处于同一环境(Sandbox/Production),与EOS开发者门户显示的会话环境一致。
  • 检查EOS开发者门户的游戏权限设置,确认会话相关的权限(如会话发现、加入)已启用。
  • 查看UE日志中的EOS相关条目,排查SDK返回的错误码,定位网络或配置问题。

内容的提问来源于stack exchange,提问作者InfJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:20:12