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
相关产品推荐
相关产品推荐

