PlayFab登录后InfoResultPayload.PlayerProfile.DisplayName返回null,如何获取用户名?
问题原因
你遇到的DisplayName返回null的核心原因是:PlayFab的**DisplayName和Username是两个独立的用户字段**。在你的注册逻辑中,仅传入了Username参数,并未设置DisplayName字段,因此该字段默认值为null,登录时自然无法获取到有效内容。
解决方案
根据需求,你可以选择以下任意一种方式获取用户名:
方案1:注册时同步设置DisplayName
修改注册请求,将DisplayName设为与Username相同的值(或其他你需要的显示名称),这样后续登录就能通过PlayerProfile.DisplayName获取到值:
public void RegisterClick() { var register = new RegisterPlayFabUserRequest { Username = Username.text, Email = Email.text, Password = Password.text, DisplayName = Username.text // 新增:设置DisplayName为用户名 }; PlayFabClientAPI.RegisterPlayFabUser(register, OnRegisterSuccess, OnRegisterFailure); }
方案2:登录成功后直接从LoginResult获取Username
LoginResult对象本身就包含了用户的Username字段,无需通过InfoResultPayload间接获取,这是更直接的方式:
private void OnLoginSuccess(LoginResult result) { // 直接获取登录时使用的Username string username = result.Username; ErrorMessage.text = username; Debug.Log(username); }
方案3:后续主动设置DisplayName(可选)
如果需要在注册后再设置或修改DisplayName,可以调用UpdateUserTitleDisplayName接口,之后再获取PlayerProfile就能拿到对应值:
// 示例:设置DisplayName的方法 public void SetDisplayName(string newDisplayName) { var request = new UpdateUserTitleDisplayNameRequest { DisplayName = newDisplayName }; PlayFabClientAPI.UpdateUserTitleDisplayName(request, OnDisplayNameUpdated, OnError); } private void OnDisplayNameUpdated(UpdateUserTitleDisplayNameResult result) { Debug.Log("DisplayName已更新为:" + result.DisplayName); } private void OnError(PlayFabError error) { Debug.LogError("设置DisplayName失败:" + error.ErrorMessage); }
内容的提问来源于stack exchange,提问作者AK200122
相关产品推荐
相关产品推荐

