Unity 游戏中的好友

借助 Play 游戏好友功能,玩家可以创建和维护跨游戏好友列表。您可以请求访问此好友列表,帮助玩家与好友一起畅玩您的游戏。如需详细了解好友系统,请参阅好友概念页面

前期准备

  • 设置您的项目和适用于 Unity 的 Google Play 游戏插件。如需了解详情,请参阅入门指南

  • 如需了解实现这些 API 的最佳方式,请参阅最佳实践指南

如需了解实现这些 API 的最佳方式,请参阅最佳实践指南

启用好友功能

如需启用好友功能,请使用以下功能:

  • 查看好友:请求访问玩家的好友列表,以便将他们的 Play 游戏好友添加到游戏内好友列表。

  • 查看玩家资料:让玩家查看其他玩家的 Play 游戏玩家资料。这一点非常重要,可让玩家了解好友,并与游戏中的其他 Play 游戏玩家建立联系。这需要关联到界面元素以触发弹出式窗口。如需了解详情,请参阅好友指南

查看好友

可通过两种方式加载好友:使用 ISocial 框架加载,或直接使用 PlayGamesPlatform 加载。

使用 ISocial 框架加载好友

Social.localUser.LoadFriends((success) =>  {
    Debug.Log("Friends loaded OK: " + ok));
    foreach(IUserProfile p in Social.localUser.friends) {
         Debug.Log(p.userName + " is a friend");
    }

不过,如果当前玩家尚未授权游戏访问这些信息,此调用将会失败。请使用 GetLastLoadFriendsStatus 检查 LoadFriends 是否是因未征得用户同意而失败。

 PlayGamesPlatform.Instance.GetLastLoadFriendsStatus((status) => {
    // Check for consent
    if (status == LoadFriendsStatus.ResolutionRequired) {
        // Ask for resolution.
    }
});

游戏可以通过调用 AskForLoadFriendsResolution 请求当前玩家共享好友列表。

PlayGamesPlatform.Instance.AskForLoadFriendsResolution((result) => {
    if (result == UIStatus.Valid) {
        // User agreed to share friends with the game. Reload friends.
    } else {
        // User doesn’t agree to share the friends list.
    }
});

调用此函数后,系统将显示相应的平台专用好友共享界面。此界面上会显示提示,询问玩家是否愿意与游戏共享好友。

使用 PlayGamesPlatform 加载好友

另外,还可以使用 LoadFriendsLoadMoreFriends 加载好友:

PlayGamesPlatform.Instance.LoadFriends(pageSize, forceReload, (status) => {
    // Check if the call is successful and if there are more friends to load.
});

PlayGamesPlatform.Instance.LoadMoreFriends(pageSize, (status) => {
    // Check if there are more friends to load.
});

pageSize 参数表示请求访问此页面的条目数。请注意,如果已存在缓存数据,返回的缓冲区包含的数据量可能超过这个大小。如果集合包含足够的记录,那么缓冲区包含的条目一定至少达到这个数量。如果将 forceReload 设置为 true,此调用将清除本地缓存的所有数据,并尝试从服务器提取最新数据。这通常用于用户发起的刷新等操作。通常应将其设置为 false,以充分利用数据缓存。

如果回调返回 LoadFriendsStatus.LoadMore,系统会加载更多好友。LoadFriendsStatus.ResolutionRequired 表示用户尚未共享好友列表,您可以直接调用 PlayGamesPlatform.Instance.AskForLoadFriendsResolution

确定好友列表公开范围

使用 PlayGamesPlatform.Instance.GetFriendsListVisibility 检查用户是否已与游戏共享好友列表。可能返回的状态包括:

  • FriendsListVisibilityStatus.RequestRequired,表示您必须征求用户意见。

  • FriendsListVisibilityStatus.Visible,表示应该可以成功加载好友列表。

  • FriendsListVisibilityStatus.Unknown,通常不应出现。您可以将 forceReload 设为 true,以刷新数据。

PlayGamesPlatform.Instance.GetFriendsListVisibility(forceReload, (friendsListVisibilityStatus) => {});

查看玩家资料

如需将玩家添加为好友或从好友中移除玩家,请使用显示并比较玩家资料函数。此函数会触发底部动作条对话框,其中显示用户的 Play 游戏玩家资料;调用此函数时应包含所请求玩家的玩家 ID。如果玩家和好友在游戏内有昵称,请在调用中使用这些昵称,以便为玩家资料界面提供更多背景信息:

PlayGamesPlatform.Instance.ShowCompareProfileWithAlternativeNameHintsUI(
    mFirstFriendId, /* otherPlayerInGameName= */ null, /* currentPlayerInGameName= */ null,
    (result) => {
        // Profile comparison view has closed.
});