メインコンテンツまでスキップ

SDK を使用してプレイヤーを見つける - プレイヤーを検索する - (Unity モジュール)

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

ラッパーを開く

このチュートリアルでは、AccelByte Gaming Services (AGS) Game SDK を使用して、表示名またはフレンドコードでプレイヤーを検索する方法を学びます。Byte Wars には、FriendsEssentialsWrapper.cs という SDK ラッパーがあります。このラッパーには、プレイヤー検索に関連する機能が含まれています。このチュートリアルでは、そのラッパーのスターターバージョンを使用して、フレンド機能を自由に実装できます。

スターターパックの内容

このチュートリアルを進めるには、FriendsEssentialsWrapper_Starter というフレンドエッセンシャルラッパーのスターターバージョンを見つけてください。このクラスには、すでにいくつかの機能が実装されています。プレイヤー検索機能を完成させるために、このクラスにさらに機能を追加します。

  • FriendsEssentialsWrapper_Starter ファイル: /Assets/Resources/Modules/Social/FriendsEssentials/Scripts/FriendEssentialsWrapper_Starter.cs

FriendsEssentialsWrapper_Starter クラスには、すでにいくつかの機能があります:

  • プレイヤーの詳細を取得するための AGS Game SDK クラスは、UserLobby、および UserProfiles です。これらのコード行は FriendsEssentialsWrapper_Starter にあります:

    private static ApiClient ApiClient => AccelByteSDK.GetClientRegistry().GetApi();
    private User user;
    private UserProfiles userProfiles;
    private Lobby lobby;
  • プレイヤーのフレンドリストが変更されたとき、またはプレイヤーを検索しているときに他のオブジェクトに通知し、それに応じて何かを実行できるようにする ObservableList プロパティ。

    public ObservableList<string> CachedFriendUserIds { get; private set; } = new ObservableList<string>();
  • Awake() 関数は、SDK からユーザー、ユーザープロファイル、およびロビーを取得するために使用されます。

    private void Awake()
    {
    user = ApiClient.GetUser();
    userProfiles = ApiClient.GetUserProfiles();
    lobby = ApiClient.GetLobby();
    }

ユーザー詳細の取得を実装する

検索したユーザーとそのフレンドの詳細(表示名やアバター画像など)を表示するには、この情報を取得するための特定の SDK 関数を呼び出す必要があります。FriendsEssentialsWrapper_Starter.cs ファイルを開き、以下の GetBulkUserInfo() 関数を追加して、このためのユーティリティ関数を作成しましょう。この関数を使用すると、複数のユーザーの情報を一度にクエリできます。

public void GetBulkUserInfo(string[] userIds, ResultCallback<AccountUserPlatformInfosResponse> resultCallback)
{
user.GetUserOtherPlatformBasicPublicInfo("ACCELBYTE", userIds, result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error getting bulk user info, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log($"Successfully retrieved bulk user info");
CachedFriendUserIds.Add(userIds);
}

resultCallback?.Invoke(result);
});
}

フレンドコードでプレイヤーを検索する実装

このセクションでは、フレンドコードでプレイヤーを検索する機能を実装します。

  1. FriendsEssentialsWrapper_Starter.cs を開き、現在ログインしているプレイヤーのフレンドコード(パブリック ID とも呼ばれます)を取得するための GetSelfFriendCode() という新しい関数を作成します。

    public void GetSelfFriendCode(ResultCallback<string> resultCallback)
    {
    string userId = GameData.CachedPlayerState.PlayerId;
    if (string.IsNullOrEmpty(userId))
    {
    string errorMessage = "Error to get self friend code. Failed to find the logged-in user Id.";
    BytewarsLogger.LogWarning(errorMessage);
    resultCallback.Invoke(Result<string>.CreateError(ErrorCode.InvalidArgument, errorMessage));
    return;
    }

    // Use cache if available.
    if (userId == cachedUserProfile?.userId)
    {
    resultCallback.Invoke(Result<string>.CreateOk(cachedUserProfile.publicId));
    return;
    }

    // Query the user profile to get its friend code (public ID).
    userProfiles.GetPublicUserProfile(userId, (Result<PublicUserProfile> result) =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning($"Error to get self friend code. Error: {result.Error.Message}");
    resultCallback.Invoke(Result<string>.CreateError(result.Error.Code, result.Error.Message));
    return;
    }

    BytewarsLogger.Log($"Successfully get self friend code for User Id: {userId}");

    cachedUserProfile = result.Value;
    resultCallback.Invoke(Result<string>.CreateOk(cachedUserProfile.publicId));
    });
    }
  2. GetUserByFriendCode() という新しい関数を作成します。ここで使用される SDK 関数は PublicUserData ではなく PublicUserProfile を返しますが、後者に存在するデータが必要です。そのため、最後に GetBulkUserInfo を呼び出してそれらのデータを取得します。また、ローカルプレイヤーが現在そのユーザーを検索していることを他のオブジェクトに通知するために、ターゲットユーザーを CachedFriendUserIds に追加しています。

    public void GetUserByFriendCode(string friendCode, ResultCallback<AccountUserPlatformData> resultCallback)
    {
    userProfiles.GetUserProfilePublicInfoByPublicId(friendCode, result =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning(
    $"Error getting user profile public info by public id. " +
    $"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
    resultCallback?.Invoke(Result<AccountUserPlatformData>.CreateError(result.Error.Code, result.Error.Message));
    return;
    }

    GetBulkUserInfo(new string[] { result.Value.userId }, result =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning(
    $"Error getting user profile public info by public id. " +
    $"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
    resultCallback?.Invoke(Result<AccountUserPlatformData>.CreateError(result.Error.Code, result.Error.Message));
    return;
    }

    BytewarsLogger.Log("Successfully retrieved user profile public info by public id.");

    AccountUserPlatformData userData = result.Value.Data[0];
    CachedFriendUserIds.Add(userData.UserId);
    resultCallback?.Invoke(Result<AccountUserPlatformData>.CreateOk(userData));
    });
    });
    }
  3. フレンドシップステータスを取得するための GetFriendshipStatus() という新しい関数を作成します。名前が示すように、これはプレイヤーとローカルプレイヤーとのフレンドシップステータスを取得するために使用されます。

    public void GetFriendshipStatus(string userId, ResultCallback<FriendshipStatus> resultCallback)
    {
    lobby.GetFriendshipStatus(userId, result =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning("Error getting friendship status, " +
    $"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
    }
    else
    {
    BytewarsLogger.Log($"Successfully retrieved friendship status for {userId}");
    }

    resultCallback.Invoke(result);
    });
    }

表示名でプレイヤーを検索する実装

このセクションでは、表示名でプレイヤーを検索する機能を実装します。

  1. FriendsEssentialsWrapper_Starter.cs を開き、GetUserByDisplayName() という新しい関数を作成します。Byte Wars では、検索結果は 1 つのみ許可されています。そのため、この関数では最初の結果のみが取得されます。また、ローカルプレイヤーが現在そのユーザーを検索していることを他のオブジェクトに通知するために、ターゲットユーザーが CachedFriendUserIds に追加されます。

    備考

    バックエンドは、表示名検索を実行するために 3 文字から 20 文字の長さ(両端を含む)のみを受け入れることができます。この範囲外の入力は結果を返しません。ただし、AGS Private Cloud ユーザーは、環境変数を設定することでキーワード文字範囲を変更できます。

    API リファレンス: IAM/PublicSearchUserV3

    public void GetUserByExactDisplayName(string displayName, ResultCallback<PublicUserInfo> resultCallback)
    {
    const SearchType searchBy = SearchType.DISPLAYNAME;

    user.SearchUsers(displayName, searchBy, result =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning("Error searching users by display name, " +
    $"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");

    resultCallback?.Invoke(Result<PublicUserInfo>.CreateError(result.Error.Code, result.Error.Message));
    return;
    }

    PublicUserInfo userByExactDisplayName = result.Value.data.FirstOrDefault(publicUserInfo =>
    AccelByteWarsOnlineUtility.GetDisplayName(publicUserInfo).Equals(displayName, StringComparison.CurrentCultureIgnoreCase));

    if (userByExactDisplayName == null)
    {
    BytewarsLogger.LogWarning($"User with display name {displayName} not found.");

    resultCallback?.Invoke(Result<PublicUserInfo>.CreateError(ErrorCode.UserNotFound, "User not found."));
    return;
    }

    BytewarsLogger.Log($"Successfully found users for display name: {displayName}");
    CachedFriendUserIds.Add(userByExactDisplayName.userId);

    resultCallback?.Invoke(Result<PublicUserInfo>.CreateOk(userByExactDisplayName));
    });
    }

アバターの取得を実装する

前の関数から収集されたデータは、プレイヤーのアバター URL であり、画像自体ではありません。実際の画像を取得するには、SDK から別の関数を呼び出す必要があります。次の手順に従ってください:

  1. FriendsEssentialsWrapper_Starter.cs を開き、GetUserAvatar() という新しい関数を作成します。

    public void GetUserAvatar(string userId, ResultCallback<Texture2D> resultCallback)
    {
    user.GetUserAvatar(userId, result =>
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning("Error getting Avatar, " +
    $"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
    }
    else
    {
    BytewarsLogger.Log($"Successfully retrieved Avatar for User Id: {userId}");
    }

    resultCallback?.Invoke(result);
    });
    }

フレンドリクエストの送信を実装する

フレンド招待リクエストを送信する機能を実装するには、FriendsEssentialsWrapper_Starter.cs を開き、SendFriendRequest() という新しい関数を作成します。

public void SendFriendRequest(string userId, ResultCallback resultCallback)
{
lobby.RequestFriend(userId, result =>
{
if (result.IsError)
{
BytewarsLogger.LogWarning("Error sending Friends Request, " +
$"Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
}
else
{
BytewarsLogger.Log("Successfully sent Friends Request");
}

resultCallback?.Invoke(result);
});
}

リソース