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

すべてを統合する - プレイヤーを検索する - (Unity モジュール)

Last updated on February 4, 2026

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

UI をプレイヤー検索に接続する

  1. FindFriendsMenu_Starter.cs を開き、FriendsEssentialsWrapper_Starter クラスをプライベートフィールドとして宣言します。

    private FriendsEssentialsWrapper_Starter friendsEssentialsWrapper;
  2. 開始時に friendsEssentialsWrapper 機能を初期化するには、Start() 関数に移動して次のコードを追加します。

    private void Start()
    {
    friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();
    }
  3. FindFriend() 関数を見つけて、既存の実装を次のコードに置き換えます。Byte Wars では、ユーザーが検索を実行すると、指定された値を最初にフレンドコードとして扱います。失敗した場合は、表示名として扱います。ここでは、OnUsersFriendCodeFound() 関数が呼び出され、ユーザー情報を確認して表示します。

    private void FindFriend(string query)
    {
    if (string.IsNullOrEmpty(friendSearchBar.text) || string.IsNullOrEmpty(friendSearchBar.text))
    {
    return;
    }

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Loading);
    friendSearchBar.enabled = false;
    ClearSearchPanel();

    // Find friend by friend code, make sure the friend code is in uppercase.
    friendsEssentialsWrapper.GetUserByFriendCode(query.ToUpper(), result =>
    {
    OnUsersFriendCodeFound(result, query, fallbackAction: () =>
    {
    BytewarsLogger.Log("Friend code not found, searching by exact display name");

    friendsEssentialsWrapper.GetUserByExactDisplayName(query, result => OnUsersDisplayNameFound(result, query));
    });
    });
    }
  4. OnUsersFriendCodeFound() というコールバック関数を作成して、フレンドコードによるユーザー検索のレスポンスを受信したときに、データ、UI の変更、およびフォールバックアクションを処理します。フレンドコードが見つからない場合は、最初にフォールバックアクションをトリガーしようとします。フォールバックアクションがない場合は、クエリが見つからなかったというメッセージを表示します。

    private void OnUsersFriendCodeFound(Result<AccountUserPlatformData> result, string query, Action fallbackAction = null)
    {
    friendSearchBar.enabled = true;

    if (result.IsError)
    {
    if (fallbackAction is not null)
    {
    fallbackAction.Invoke();
    return;
    }

    string queryNotFoundMessage = FriendsEssentialsModels.QueryNotFoundMessage.Replace("%QUERY%", query);
    widgetSwitcher.ErrorMessage = queryNotFoundMessage;
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    AccountUserPlatformData userData = result.Value;
    if (userData.UserId == GameData.CachedPlayerState.PlayerId)
    {
    BytewarsLogger.Log("Found friend code with self entry");

    widgetSwitcher.ErrorMessage = FriendsEssentialsModels.FriendRequestSelfMessage;
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    SendFriendInvitation(userData.UserId, usingFriendCode: true);
    CreateFriendEntry(userData.UserId, AccelByteWarsOnlineUtility.GetDisplayName(userData));
    }
  5. OnUsersDisplayNameFound() という別のコールバック関数を作成して、検索(表示名を使用)のレスポンスを受信したときに、データと UI の変更を処理します。ユーザーが見つかった場合は、結果が表示されます。見つからない場合は、クエリが見つからなかったというメッセージを表示します。

    private void OnUsersDisplayNameFound(Result<PublicUserInfo> result, string query)
    {
    if (result.IsError)
    {
    string queryNotFoundMessage = FriendsEssentialsModels.QueryNotFoundMessage.Replace("%QUERY%", query);
    widgetSwitcher.ErrorMessage = queryNotFoundMessage;
    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    CreateFriendEntry(result.Value.userId, AccelByteWarsOnlineUtility.GetDisplayName(result.Value));
    }
  6. CreateFriendEntry() という関数を作成して、FriendEntry.prefab をインスタンス化し、ユーザーのアバター、表示名、招待送信ボタンを表示します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    if (userId == GameData.CachedPlayerState.PlayerId)
    {
    BytewarsLogger.Log("Skipping self entry");

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Empty);
    return;
    }

    GameObject playerEntry = Instantiate(friendEntryPrefab, resultContentPanel);
    playerEntry.name = userId;

    FriendEntry playerEntryHandler = playerEntry.GetComponent<FriendEntry>();
    playerEntryHandler.EntryView = FriendEntry.FriendEntryView.Searched;
    playerEntryHandler.UserId = userId;
    playerEntryHandler.FriendName.text = displayName;

    userResult = playerEntry;
    }

UI をフレンドコード表示に接続する

  1. FindFriendsMenu_Starter.cs を開き、SetFriendCodeText() という関数を作成して、プレイヤーのフレンドコードを表示します。

    private void SetFriendCodeText()
    {
    friendCode.SetText(FriendsEssentialsModels.FriendCodePreloadMessage);
    friendsEssentialsWrapper.GetSelfFriendCode((Result<string> result) =>
    {
    if (!result.IsError)
    {
    friendCode.SetText(result.Value);
    }
    });
    }
  2. Start() 関数に移動して、次のコードを追加してプレイヤーのフレンドコードを表示します。

    private void Start()
    {
    friendsEssentialsWrapper = TutorialModuleManager.Instance.GetModuleClass<FriendsEssentialsWrapper_Starter>();

    SetFriendCodeText();
    }

UI をフレンドシップステータス確認に接続する

Byte Wars では、検索結果を受信すると、ゲームは最初にフレンドシップステータスを確認し、検索されたユーザーがローカルユーザーと NotFriend の場合にのみ招待ボタンを有効にします。

  1. FindFriendsMenu_Starter.cs を開き、CheckFriendshipStatus() という関数を作成して、プレイヤーと検索されたプレイヤー間のフレンドシップステータスを確認します。

    private void CheckFriendshipStatus(string userId)
    {
    friendsEssentialsWrapper.GetFriendshipStatus(userId, OnGetFriendshipStatusCompleted);
    }
  2. OnGetFriendshipStatusCompleted() というコールバック関数を作成して、フレンドシップステータスが取得されたときに、データと UI の変更を処理します。結果により、現在のビューの状態と、検索されたプレイヤーの UI エントリに表示されるステータスメッセージが決定されます。

    private void OnGetFriendshipStatusCompleted(Result<FriendshipStatus> result)
    {
    if (userResult is null)
    {
    return;
    }

    FriendEntry entryHandler = userResult.GetComponent<FriendEntry>();
    if (result.IsError)
    {
    entryHandler.FriendStatus.text = FriendsEssentialsModels.ErrorStatusMessage;
    BytewarsLogger.LogWarning($"Unable to get friendship status: {result.Error.Message}");

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Error);
    return;
    }

    widgetSwitcher.SetWidgetState(AccelByteWarsWidgetSwitcher.WidgetState.Not_Empty);

    RelationshipStatusCode friendshipStatus = result.Value.friendshipStatus;

    string statusMessage = FriendsEssentialsModels.StatusMessageMap[friendshipStatus];
    entryHandler.FriendStatus.text = statusMessage;
    entryHandler.SendInviteButton.interactable = friendshipStatus is RelationshipStatusCode.NotFriend;

    if (friendshipStatus is RelationshipStatusCode.Outgoing)
    {
    entryHandler.SendInviteButton.GetComponentInChildren<TMP_Text>().text = FriendsEssentialsModels.RequestSentMessage;
    }
    }
  3. CreateFriendEntry() 関数に移動して、次のコードを追加し、以下に示すようにフレンドエントリを作成した後に CheckFriendshipStatus() 関数を呼び出します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    //...
    userResult = playerEntry;

    CheckFriendshipStatus(userId);
    }

UI をフレンド招待送信に接続する

  1. FindFriendsMenu_Starter.cs を開き、SendFriendInvitation() という関数を作成して、検索されたプレイヤーにフレンド招待を送信します。この関数は、フレンドリクエストの送信中にローディングプロンプトを表示します。

    private void SendFriendInvitation(string userId, bool usingFriendCode = false)
    {
    if (!usingFriendCode)
    {
    MenuManager.Instance.PromptMenu.ShowLoadingPrompt(FriendsEssentialsModels.SendingFriendRequestMessage);
    }

    friendsEssentialsWrapper.SendFriendRequest(userId, result => OnSendRequestComplete(result, usingFriendCode));
    }
  2. OnSendRequestComplete() というコールバック関数を作成して、フレンドリクエストのレスポンスを受信したときに、データと UI の変更を処理します。結果により、招待送信ボタンの状態と UI に表示されるステータスメッセージが更新されます。

    private void OnSendRequestComplete(IResult result, bool usingFriendCode = false)
    {
    if (result.IsError)
    {
    if (usingFriendCode)
    {
    BytewarsLogger.LogWarning($"Unable to send friend request using friend code: {result.Error.Message}");
    return;
    }

    string errorMessage = FriendsEssentialsModels.DefaultSendFriendRequestErrorMessage;
    if (FriendsEssentialsModels.SendFriendRequestErrorMessages.TryGetValue(result.Error.Code, out string message))
    {
    errorMessage = message;
    }

    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptErrorTitle, errorMessage, "OK", null);
    return;
    }

    string promptDetailsMessage = usingFriendCode
    ? FriendsEssentialsModels.FriendRequestSentFriendCodeMessage
    : FriendsEssentialsModels.FriendRequestSentDetailsMessage;

    MenuManager.Instance.PromptMenu.ShowPromptMenu(FriendsEssentialsModels.PromptMessageTitle,
    promptDetailsMessage, "OK", null);

    if (!userResult.TryGetComponent(out FriendEntry entryHandler))
    {
    return;
    }

    entryHandler.SendInviteButton.interactable = false;
    entryHandler.SendInviteButton.GetComponentInChildren<TMP_Text>().text = FriendsEssentialsModels.RequestSentMessage;
    entryHandler.FriendStatus.text = FriendsEssentialsModels.StatusMessageMap[RelationshipStatusCode.Outgoing];
    }
  3. CreateFriendEntry() 関数に移動して、次のコードを追加し、招待送信ボタンがクリックされたときに SendFriendInvitation() 関数を呼び出します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    //...
    playerEntryHandler.FriendName.text = displayName;
    playerEntryHandler.SendInviteButton.onClick.AddListener(() => SendFriendInvitation(userId));

    userResult = playerEntry;
    //...
    }

UI を検索されたプレイヤーのアバター表示に接続する

  1. FindFriendsMenu_Starter.cs を開き、RetrieveUserAvatar() という関数を作成して、検索されたプレイヤーのアバターを取得します。

    private void RetrieveUserAvatar(string userId)
    {
    friendsEssentialsWrapper.GetUserAvatar(userId, result => OnGetAvatarCompleted(result, userId));
    }
  2. OnGetAvatarCompleted() というコールバック関数を作成して、アバターが取得されたときに、データと UI の変更を処理します。結果により、UI に表示されるアバター画像が更新されます。

    private void OnGetAvatarCompleted(Result<Texture2D> result, string userId)
    {
    if (result.IsError)
    {
    BytewarsLogger.LogWarning($"Unable to get avatar for user Id: {userId}, " +
    $"Error Code: {result.Error.Code}, " +
    $"Error Message: {result.Error.Message}");
    return;
    }

    if (result.Value == null || userResult == null)
    {
    return;
    }

    Image entryImage = userResult.GetComponent<FriendEntry>().FriendImage;
    Rect imageRect = new Rect(0f, 0f, result.Value.width, result.Value.height);
    entryImage.sprite = Sprite.Create(result.Value, imageRect, Vector2.zero);
    }
  3. CreateFriendEntry() 関数に移動して、次のコードを追加し、フレンドエントリを作成した後に RetrieveUserAvatar() 関数を呼び出します。

    private void CreateFriendEntry(string userId, string displayName)
    {
    //...
    userResult = playerEntry;

    CheckFriendshipStatus(userId);
    RetrieveUserAvatar(userId);
    }

リソース