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

Unreal Engine C++中访问FUserOnlineAccount的技术咨询

关于Unreal Engine 4中访问FUserOnlineAccount的代码修正与说明

嘿,我帮你把这段访问FUserOnlineAccount的代码捋顺并修正一下~你的代码思路是对的,但有几个细节需要调整,不然可能会触发崩溃或者编译错误,下面是修正后的完整代码以及关键说明:

修正后的完整代码

FString UCToBluePrintFunctionsLibrary::getUserAccount() { 
    // 先获取OnlineSubsystem,务必做空指针检查
    IOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get(); 
    if (!OnlineSubsystem) {
        UE_LOG(LogTemp, Warning, TEXT("无法获取OnlineSubsystem!"));
        return FString();
    }

    // 获取身份验证接口,校验有效性
    IOnlineIdentityPtr OnlineIdentity = OnlineSubsystem->GetIdentityInterface();
    if (!OnlineIdentity.IsValid()) {
        UE_LOG(LogTemp, Warning, TEXT("无法获取OnlineIdentity接口!"));
        return FString();
    }

    // 获取索引0对应的玩家UniqueNetId
    TSharedPtr<const FUniqueNetId> PlayerId = OnlineIdentity->GetUniquePlayerId(0); 
    if (!PlayerId.IsValid()) {
        UE_LOG(LogTemp, Warning, TEXT("无法获取索引0的玩家ID!"));
        return FString();
    }

    // 获取用户在线账户,注意参数要传入解引用后的UniqueNetId
    TSharedPtr<const FUserOnlineAccount> UserAccount = OnlineIdentity->GetUserAccount(*PlayerId); 
    if (UserAccount.IsValid()) { 
        // 用->调用成员函数,且将AccessToken转为FString返回
        return UserAccount->GetAccessToken().ToString();
    } 

    UE_LOG(LogTemp, Warning, TEXT("无法获取用户在线账户!"));
    return FString();
}

关键细节说明

  • 空指针/有效性校验:Unreal的OnlineSubsystem和相关接口在未配置、运行环境不支持(比如本地测试没启用在线子系统)时会返回空,必须加校验,不然很容易触发崩溃
  • GetUserAccount的参数:这个接口需要传入const FUniqueNetId&类型的参数,所以要对TSharedPtr<const FUniqueNetId>做解引用(*PlayerId)
  • GetAccessToken的调用:TSharedPtr类型需要用->访问成员函数,而且GetAccessToken()返回的是FOnlineAccountCredentials::FToken对象,需要调用ToString()才能转成FString返回
  • 日志输出:添加UE_LOG可以在调试时快速定位哪一步出了问题,方便排查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:12